ISOYEAR

从日期date输入中提取其ISO 8601年份。

IOS 8601介绍

ISO 8601年份依据 ISO 周日期系统定义,与公历年份有所不同。具体来说:ISO 年份的第一天,是包含该年第一个星期四的那个星期一。示例:

  • 如果11日是星期五、星期六或星期日,那么这一周属于上一个 ISO 年份的最后一周。

  • 如果11日是星期一至星期三,则这一周属于下一个 ISO 年份的第一周。

这意味着 ISO 年份可能从公历年的前一周开始,或延续到下一年的第一周结束。这种定义可以确保每个ISO 年份都恰好包含5253个完整的星期,便于跨年度的时间计算和规划。

命令格式

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

参数说明

  • date:必填。STRING、DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZINTERVAL类型日期值。INTERVAL数据类型的使用请参见INTERVAL数据类型

    说明
    • STRING类型的数据,日期格式需包含yyyy-mm-ddyyyy-mm-dd hh:mi:ss

    • INTERVAL类型作为输入参数时,仅支持INTERVAL_YEAR_MONTH,不支持INTERVAL_DAY_TIME使用请参见INTERVAL数据类型

返回值说明

返回INT类型。返回规则如下:

  • dateSTRING、DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZINTERVAL类型,或格式不符合要求时,返回NULL或报错。

  • date值为NULL时,返回NULL。

使用示例

-- 返回 2025。
SELECT ISOYEAR('2025-03-12 12:22:00:123');
-- 返回 2025。
SELECT ISOYEAR(TIMESTAMP '2025-03-31 12:43:00');
-- 返回 2025。
SELECT ISOYEAR(DATE '2025-01-01');
-- 返回 2024。
SELECT ISOYEAR(DATETIME '2024-01-01 12:30:00');
-- 返回 2025。
SELECT ISOYEAR(TIMESTAMP_NTZ '2025-06-06 12:43:00.123');
-- 返回 1。
SELECT ISOYEAR(INTERVAL '1-2' YEAR TO MONTH);
-- 返回 1.
SELECT ISOYEAR(INTERVAL '14'MONTH);
-- 返回 2024。
SELECT ISOYEAR(DATE '2023-01-01' + INTERVAL '1-2' YEAR TO MONTH);
-- 返回 2014。
SELECT ISOYEAR(DATE '2023-01-01' + INTERVAL '-9' YEAR);
-- 返回 2023。
SELECT ISOYEAR(DATE '2023-01-01' + INTERVAL '11' MONTH);
-- 返回 2024。
SELECT ISOYEAR(DATE '2023-12-29' + INTERVAL '10 2' DAY TO HOUR);
-- 返回 2024。
SELECT ISOYEAR(TIMESTAMP '2023-12-29 12:30:20' + INTERVAL '10 2' DAY TO HOUR);
-- 返回 2024。
SELECT ISOYEAR(TIMESTAMP_NTZ '2023-12-29 12:30:20' + INTERVAL '10 2' DAY TO HOUR);
-- 返回  2024。
SELECT ISOYEAR(TIMESTAMP_NTZ '2023-12-31 20:30:20' + INTERVAL '10'HOUR);