NEXT_DAY用于返回从指定日期start_date往后的第一个week_day的具体日期,例如计算start_date之后的第一个周一(MONDAY)的具体日期。
命令格式
STRING NEXT_DAY(DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ|STRING <start_date>, STRING <week_day>)
-- 标准示例。
-- 返回2025-03-10。
SELECT NEXT_DAY('2025-03-06', 'MONDAY');参数说明
start_date:必填。起始日期值。支持DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZ或STRING类型。
STRING类型作为输入参数时,日期格式需包含
yyyy-mm-dd。week_day:必填。需匹配的星期几。STRING类型。支持完整英文名(不区分大小写):SUNDAY, MONDAY, ..., SATURDAY,允许常用缩写(如 MON, TUE)。
返回值说明
使用示例
示例1:星期缩写输入。
-- 返回2017-08-08。 SELECT NEXT_DAY('2017-08-01', 'TU'); -- 返回2017-08-08。 SELECT NEXT_DAY('2017-08-01 23:34:00', 'TU');示例2:非法日期格式返回 NULL。
-- 格式不合法(非 yyyy-mm-dd),无法解析为有效日期。 -- 返回NULL。 SELECT NEXT_DAY('20170801', 'TU');示例3:多种时间类型输入(DATE/DATETIME/TIMESTAMP/TIMESTAMP_NTZ)。
-- 设置数据类型版本为2.0。 SET odps.sql.type.system.odps2 = true; -- 返回2025-03-10。 SELECT NEXT_DAY(DATE '2025-03-06', 'MO'); -- 返回2025-03-10。 SELECT NEXT_DAY(DATETIME '2025-03-06 14:20:00', 'MO'); -- 返回2025-03-10。 SELECT NEXT_DAY(TIMESTAMP '2025-03-06 14:20:00.123', 'MO'); -- 返回2025-03-10。 SELECT NEXT_DAY(TIMESTAMP_NTZ '2025-03-06 14:20:00.123', 'MO');示例4:跨月计算。
-- 返回2025-04-06。 SELECT NEXT_DAY('2025-03-30', 'SU');示例5:NULL值处理。1.0数据类型版本和2.0数据类型版本存在差异。
-- 设置数据类型版本为2.0。 SET odps.sql.type.system.odps2 = true; -- 返回NULL。 SELECT NEXT_DAY('2017-08-01 23:34:00', NULL); -- 返回报错。 SELECT NEXT_DAY(NULL, 'TU'); -- 设置数据类型版本为1.0。 SET odps.sql.type.system.odps2 = false; -- 返回NULL。 SELECT NEXT_DAY('2017-08-01 23:34:00', NULL); -- 返回NULL。 SELECT NEXT_DAY(NULL, 'TU');
相关函数
NEXT_DAY函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数。
该文章对您有帮助吗?