LAST_DAY

返回输入日期在指定单位datepart的最后一天的日期。

命令格式

DATE|STRING LAST_DAY(DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ|STRING <date>[,STRING <datepart>])

参数说明

  • date:必填。DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZSTRING类型日期值。取值为STRING类型日期时间格式时,至少要包含yyyy-mm-dd且不含多余的字符串。

  • datepart:选填。若未填,默认返回该日期所在月份的最后一天日期。STRING类型常量。此字段支持的取值有:

    时间单位

    取值

    yearyyyy

    ISO

    isoyear

    季度

    quarterq

    monthmonmm

    weekweek(weekday)

    ISO

    isoweek

说明
  • isoyear采用ISO 8601周编号年边界。ISO年的边界是第一周的星期一,星期四属于相应的公历年。

  • week是以周一为一周的第一天,等效于week(monday)。

  • isoweek采用ISO 8601 所规定的周边界。ISO周从周一开始算起。

  • week(weekday)周从指定的星期几(weekday)开始算起。weekday的有效值为:周日(SUNDAY)、周一(MONDAY)、周二(TUESDAY)、周三(WEDNESDAY)、周四(THURSDAY)、周五(FRIDAY)以及周六(SATURDAY)。

返回值说明

当指定datepart时,返回DATE类型的日期值;未指定datepart时,返回STRING类型日期值。返回格式为yyyy-mm-dd。返回规则如下:

  • dateDATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZSTRING类型,或格式不符合要求时,返回NULL或错误结果。

  • date值为NULL时,返回报错。

使用示例

示例一:静态数据示例

-- 返回2025-03-31。
SELECT last_day('2025-03-04');
-- 返回2025-07-31。
SELECT last_day('2025-07-04 11:40:00');
-- 返回NULL。
SELECT last_day('20250304');
-- 返回2027-08-31。
SELECT last_day('2024-08-01123');
-- 返回2025-03-31。
SELECT LAST_DAY('2025-03-27 11:40:00','MONTH');
-- 返回2025-12-31。
SELECT LAST_DAY(DATETIME '2025-03-27 11:40:00','YEAR');
-- 返回2025-12-28。
SELECT LAST_DAY(TIMESTAMP '2025-03-27 11:40:00.123','isoyear');
-- 返回2025-12-28。
SELECT LAST_DAY(TIMESTAMP_NTZ '2025-03-27 11:40:00.123','isoyear');
-- 返回2025-03-31。
SELECT LAST_DAY(DATETIME '2025-03-27 11:40:00','quarter');

示例二:MaxCompute中的weekisoweek,均是以周一为一周的第一天

SELECT LAST_DAY('2025-06-27 11:40:00','week(sunday)') AS ld_week_sunday,
       LAST_DAY('2025-06-27 11:40:00','isoweek') AS ld_isoweek,
       LAST_DAY('2025-06-27 11:40:00','week') AS ld_week,
       LAST_DAY('2025-06-27 11:40:00','week(monday)') AS ld_week_monday;
       
-- 返回结果。
+----------------+------------+------------+----------------+
| ld_week_sunday | ld_isoweek | ld_week    | ld_week_monday | 
+----------------+------------+------------+----------------+
| 2025-06-28     | 2025-06-29 | 2025-06-29 | 2025-06-29     | 
+----------------+------------+------------+----------------+

示例三:参数dateNULL时,返回报错

SELECT LAST_DAY(NULL,'isoyear');

-- 返回结果。
FAILED: ODPS-0130071:[1,8] Semantic analysis exception - function LAST_DAY is ambiguous with (VOID, STRING), candidates are DATE LAST_DAY(DATE arg0, STRING arg1); DATE LAST_DAY(STRING arg0, STRING arg1); DATE LAST_DAY(TIMESTAMP arg0, STRING arg1); DATE LAST_DAY(TIMESTAMP_NTZ arg0, STRING arg1)

相关函数

LAST_DAY函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数