SQL 方言通

首页 / 日期

LAST_DAY 当月最后一天

LAST_DAY 返回日期所在月份的最后一天,常用于月末结算和账期计算。多数引擎同名可用,但返回类型不同;MaxCompute 和 StarRocks 还能取季末、年末,Flink 需要用 FLOOR 和 TIMESTAMPADD 组合计算。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute 支持 LAST_DAY(date[, date_part]) 不传 date_part 时返回 yyyy-mm-dd 格式的 STRING,传入时返回 DATE。date_part 可以是 year、quarter、month、week 等。date 为 NULL 时报错。 官方文档
Hologres 支持 LAST_DAY(ts) 需要 V2.0.31~V2.1.0 或 V2.1.13 及以上版本。 官方文档
StarRocks 支持 last_day(date[, unit]) 3.1 起提供,返回 DATE。unit 可以是 month、quarter 或 year,默认 month。 官方文档
Doris 支持 LAST_DAY(date) 返回 DATE。 官方文档
Hive 支持 last_day(date) Hive 1.1.0 起提供,返回 string。 官方文档
Spark SQL 支持 last_day(date) Spark 1.5.0 起提供。 官方文档
Flink SQL 需改写 TIMESTAMPADD(DAY, -1, TIMESTAMPADD(MONTH, 1, FLOOR(ts TO MONTH))) 内置函数中没有 LAST_DAY。先用 FLOOR 取当月第一天,加一个月再减一天。 官方文档

迁移注意事项

示例

取账单日期所在月的月末

MaxCompute
SELECT LAST_DAY(bill_date) FROM bills;
StarRocks
SELECT last_day(bill_date) FROM bills;
Flink SQL
SELECT TIMESTAMPADD(DAY, -1, TIMESTAMPADD(MONTH, 1, FLOOR(bill_time TO MONTH))) FROM bills;

同类函数

最后核对日期: