首页 / 日期
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(不传 date_part)和 Hive 返回字符串,StarRocks 和 Doris 返回 DATE。结果用于关联 DATE 字段时要先转换。
- MaxCompute 的 LAST_DAY 遇到 NULL 输入会报错,而不是返回 NULL。字段可能为空时,先用 WHERE 过滤或用 IF 包一层。
- Hologres 的 LAST_DAY 有版本要求,V2.1.0~V2.1.12 之间的版本不支持。
示例
取账单日期所在月的月末
SELECT LAST_DAY(bill_date) FROM bills;SELECT last_day(bill_date) FROM bills;SELECT TIMESTAMPADD(DAY, -1, TIMESTAMPADD(MONTH, 1, FLOOR(bill_time TO MONTH))) FROM bills;