全部產品
Search
文件中心

MaxCompute:ISOYEAR

更新時間:Dec 02, 2025

ISOYEAR函數用於從指定日期date中提取對應的ISO 8601年份。

IOS 8601介紹

ISO 8601年份依據ISO周日期系統定義,與西曆年份有所不同。具體來說:ISO年份的第一天,是包含該年第一個星期四的那個星期一。樣本:

  • 如果1月1日是星期五、星期六或星期日,那麼這一周屬於上一個ISO年份的最後一周。

  • 如果1月1日是星期一至星期三,則這一周屬於當前ISO年份的第一周。

這意味著ISO年份可能從西曆年的前一周開始,或延續到下一年的第一周結束。這種定義可以確保每個ISO年份都恰好包含52或53個完整的星期,便於跨年度的時間計算和規劃。

命令格式

INT ISOYEAR(STRING|DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ|INTERVAL <date>)

-- 標準樣本
-- 返回2025。
SELECT ISOYEAR(DATE '2025-03-12');

參數說明

  • date:必填。待提取ISO年份的日期值。支援DATETIME、TIMESTAMP、TIMESTAMP_NTZ、STRING或INTERVAL類型。

    • STRING類型作為輸入參數時,日期格式需包含yyyy-mm-ddyyyy-mm-dd hh:mi:ss

    • INTERVAL類型作為輸入參數時,僅支援INTERVAL_YEAR_MONTH,不支援INTERVAL_DAY_TIME。詳情參考INTERVAL資料類型

傳回值說明

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

  • date非STRING、DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZ或INTERVAL類型,或格式不符合要求時,返回NULL或報錯。

  • date值為NULL時,返回NULL。

使用樣本

  • 樣本1:基礎日期類型的ISO年提取(STRING/DATE/DATETIME/TIMESTAMP/TIMESTAMP_NTZ)。

    -- 開啟MaxCompute 2.0資料類型版本。
    SET odps.sql.type.system.odps2 = true;
    
    -- 輸入為STRING類型,支援標準日期格式的字串。
    -- 返回2025。
    SELECT ISOYEAR('2025-03-12 12:22:00.123');
    
    -- 輸入為TIMESTAMP類型。
    -- 返回2025。
    SELECT ISOYEAR(TIMESTAMP '2025-03-31 12:43:00');
    
    -- 輸入為DATE類型。
    -- 返回2025。
    SELECT ISOYEAR(DATE '2025-01-01');
    
    -- 輸入為DATETIME類型。
    -- 返回2024。
    SELECT ISOYEAR(DATETIME '2024-01-01 12:30:00');
    
    -- 輸入為TIMESTAMP_NTZ(無時區時間戳記),支援微秒精度。
    -- 返回2025。
    SELECT ISOYEAR(TIMESTAMP_NTZ '2025-06-06 12:43:00.123');
  • 樣本2:INTERVAL_YEAR_MONTH 類型作為直接輸入。

    -- 開啟MaxCompute 2.0資料類型版本。
    SET odps.sql.type.system.odps2 = true;
    
    -- 輸入為1年2個月的時間間隔,表示從基準年起第1年。
    -- 返回1。
    SELECT ISOYEAR(INTERVAL '1-2' YEAR TO MONTH);
    
    -- 輸入INTERVAL '14' MONTH 等價於INTERVAL '1-2' YEAR TO MONTH。
    -- 返回1。
    SELECT ISOYEAR(INTERVAL '14' MONTH);
  • 樣本3:日期與INTERVAL組合運算後的ISO年計算(算術運算式)。

    -- 開啟MaxCompute 2.0資料類型版本。
    SET odps.sql.type.system.odps2 = true;
    
    -- 起始日期2023-01-01 加上1年2個月 → 得到2024-03-01 → 屬於ISO 2024年。
    -- 返回2024。
    SELECT ISOYEAR(DATE '2023-01-01' + INTERVAL '1-2' YEAR TO MONTH);
    
    -- 減去9年 → 得到2014-01-01 → 該日為星期三 → 屬於ISO 2014年第1周。
    -- 返回2014。
    SELECT ISOYEAR(DATE '2023-01-01' + INTERVAL '-9' YEAR);
    
    -- 加11個月 → 得到2023-12-01 → 屬於ISO 2023年。
    -- 返回2023。
    SELECT ISOYEAR(DATE '2023-01-01' + INTERVAL '11' MONTH);
  • 樣本4:跨年臨界點的ISO年邊界判斷。

    -- 開啟MaxCompute 2.0資料類型版本。
    SET odps.sql.type.system.odps2 = true;
    
    -- 2023年01月01日是星期日,屬於2022年的最後一周。
    -- 返回2022。
    SELECT ISOYEAR(DATETIME '2023-01-01 12:30:00');
    
    -- 2024年12月30日是星期一,屬於2025年的第一周。
    -- 返回2025。
    SELECT ISOYEAR('2024-12-30');
    
    -- 2025年01月01日是星期三,屬於2025年的第一周。
    -- 返回2025。
    SELECT ISOYEAR('2025-01-01 00:00:00');
  • 樣本5:NULL值輸入處理。

    -- date值為NULL時,返回NULL。
    SELECT ISOYEAR(NULL);

相關函數

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