全部產品
Search
文件中心

MaxCompute:WEEKOFYEAR

更新時間:Dec 16, 2025

WEEKOFYEAR函數用於返回日期date所在年的第幾周,並支援通過date_part參數指定一周的起始時間。

命令格式

BIGINT|INT WEEKOFYEAR (STRING|DATETIME|DATE|TIMESTAMP|TIMESTAMP_NTZ <date> [, STRING <date_part>])

-- 標準樣本。
-- 返回13。
SELECT WEEKOFYEAR(DATE '2025-03-31','week(monday)');

參數說明

  • date:必填。STRING、DATETIME、DATE、TIMESTAMP或TIMESTAMP_NTZ類型日期值

    當輸入為STRING類型時,日期值格式為yyyy-mm-dd hh:mi:ss。在Hive相容資料類型版本下,日期格式為yyyy-mm-dd不支援指定date_part參數。

  • date_part:選填。STRING類型。支援取值isoweek 、weekweek(weekday) 。

    時間單位

    取值

    • week:以周一為一周的第一天,等效於week(monday)

    • week(weekday):以指定的星期幾(weekday)為一周的第一天。

      有效取值:周日(SUNDAY)、周一(MONDAY)、周二(TUESDAY)、周三(WEDNESDAY)、周四(THURSDAY)、周五(FRIDAY)以及周六(SATURDAY)。

    ISO周

    isoweek採用ISO 8601所規定的周邊界。ISO標準下的周從周一開始算起。

    當未通過date_part指定周的起始時間時,系統判斷規則如下:

    • 預設周一作為一周的第一天。

    • 判斷當年的1月1日是上一年最後一周還是這一年第一周,取決於這一周的大多數日期(4天及以上)在哪一年。

傳回值說明

返回BIGINT或INT類型。返回規則如下:

  • 輸入日期值為DATETIME類型時,返回BIGINT類型。

  • 輸入日期值為STRING類型時,Hive相容資料類型版本會返回INT類型,非Hive相容模式下返回BIGINT類型。

  • 輸入日期值為DATE、TIMESTAMP或TIMESTAMP_NTZ類型時,返回INT類型。

  • 輸入日期值非STRING、DATETIME、DATE、TIMESTAMP或TIMESTAMP_NTZ類型時,返回報錯。

  • STRING類型日期值格式不符合要求時,返回NULL。

  • 輸入的日期值為NULL時,返回NULL。

使用樣本

  • 樣本1:跨年跨周周歸屬判斷。

    當未指定date_part參數時,若日期位於年末或年初,系統會根據“該周多數日期所在年份”決定其周歸屬。

    -- 返回52。
    SELECT WEEKOFYEAR(TO_DATE('20241229', 'YYYYMMDD'));
    
    -- 2025-12-29 所在周起始於2025-12-29(周一),結束於2026-01-04 → 多數日期(後四天)在2026年 → 屬於2026年第1周。
    -- 返回1。
    SELECT WEEKOFYEAR(TO_DATE('20251229', 'YYYYMMDD'));
    
    -- 2026-01-01 已進入新年,且所在周多數日期在2026年 → 屬於2026年第1周。
    -- 返回1。
    SELECT WEEKOFYEAR(TO_DATE('20260101', 'YYYYMMDD'));
    
  • 樣本2:不同周起始規則的影響。

    通過date_part參數指定一周的起始日,影響周編號結果。

    -- MaxCompute1.0資料類型不支援DATE。需開啟MaxCompute2.0資料類型傳參。
    SET odps.sql.type.system.odps2=true;
    -- 預設以周一為起點,且第一周必須包含當年至少4天。
    -- 返回14。
    SELECT WEEKOFYEAR(DATE '2025-03-31');
    
    -- 明確設定從周一(monday)開始計算周。
    -- 返回13。
    SELECT WEEKOFYEAR(DATE '2025-03-31','week(monday)');
    
    -- 以周日(sunday)為一周起點。
    -- 返回13。
    SELECT WEEKOFYEAR(DATETIME '2025-03-31 10:32:00','week(sunday)');
    
    -- 以周五(friday)為一周起點。
    -- 返回13。
    SELECT WEEKOFYEAR(TIMESTAMP_NTZ '2025-03-31 10:32:00.123','week(friday)');
  • 樣本3:ISO標準周計算。

    使用 isoweek 遵循ISO 8601標準,每周從周一始,且第一周必須包含當年至少4天。

    -- MaxCompute1.0資料類型不支援DATE。需開啟MaxCompute2.0資料類型傳參。
    SET odps.sql.type.system.odps2=true;
    -- 按 ISO 周標準,2025-01-06 屬於第2周。
    -- 返回2。
    SELECT WEEKOFYEAR(DATE '2025-01-06','isoweek');
  • 樣本4:多種時間類型輸入支援。

    -- 輸入為 DATETIME 類型。
    -- 返回1。
    SELECT WEEKOFYEAR(DATETIME '2025-01-05 10:32:00');
    
    -- 返回0。
    SELECT WEEKOFYEAR(DATETIME '2025-01-05 10:32:00','week(monday)');
    
    -- 輸入為標準日期格式字串。
    -- 返回27。
    SELECT WEEKOFYEAR('2025-07-01 12:30:15');
    
    -- MaxCompute1.0資料類型不支援TIMESTAMP。需開啟MaxCompute2.0資料類型傳參。
    SET odps.sql.type.system.odps2=true;
    -- 輸入為 TIMESTAMP 類型。
    -- 返回30。
    SELECT WEEKOFYEAR(TIMESTAMP '2025-07-21 00:30:15.123');
  • 樣本5:異常與邊界輸入處理。

    -- 字串格式不符合 yyyy-mm-dd hh:mi:ss,無法解析。
    -- 返回NULL。
    SELECT WEEKOFYEAR('20141231');
    
    -- 返回NULL。
    SELECT WEEKOFYEAR(NULL);

相關函數

WEEKOFYEAR函數屬於日期函數,更多日期計算、日期轉換的相關函數請參見日期函數