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-dd或yyyy-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函數屬於日期函數,更多日期計算、日期轉換的相關函數請參見日期函數。