NEXT_DAY

更新时间:
复制 MD 格式

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)。

返回值说明

返回STRING类型,格式为yyyy-mm-dd。返回规则如下:

  • start_date非DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZ或STRING类型,或格式不符合要求时,返回NULL。

  • start_date值为NULL时,

  • week_day值为NULL时,返回NULL。

使用示例

  • 示例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函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数。