从 Presto 318 开始,您就这么简单:
SELECT day(last_day_of_month(some_date))
见https://trino.io/docs/current/functions/datetime.html#last_day_of_month
在 Presto 318 之前,您可以将 date_trunc 与 EXTRACT 结合使用:
-
date_trunc('month', date_value)) 给出月初,date_add('month', 1, date_trunc('month', date_value)) 给出下月初
- 减去
date 值返回interval day to second
-
EXTRACT(DAY FROM interval) 返回时间间隔的天部分。您也可以使用day 便利功能代替EXTRACT(DAY FROM ...)。 EXTRACT 语法更冗长、更标准。
presto:default> SELECT
-> date_value,
-> EXTRACT(DAY FROM (
-> date_add('month', 1, date_trunc('month', date_value)) - date_trunc('month', date_value)))
-> FROM (VALUES DATE '2019-01-15', DATE '2019-02-01') t(date_value);
date_value | _col1
------------+-------
2019-01-15 | 31
2019-02-01 | 28
(2 rows)
不太自然但更短的替代方法是使用day(date_add('day', -1, date_add('month', 1, date_trunc('month', date_value)))) 获取给定月份的最后一天的天数:
presto:default> SELECT
-> date_value,
-> day(date_add('day', -1, date_add('month', 1, date_trunc('month', date_value))))
-> FROM (VALUES DATE '2019-01-15', DATE '2019-02-01') t(date_value);
date_value | _col1
------------+-------
2019-01-15 | 31
2019-02-01 | 28
(2 rows)