从日期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>)
参数说明
date:必填。STRING、DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZ或INTERVAL类型日期值。INTERVAL数据类型的使用请参见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。
使用示例
-- 返回 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);
该文章对您有帮助吗?