如何根据日期获取月份的天数?
Posted
技术标签:
【中文标题】如何根据日期获取月份的天数?【英文标题】:How to get number of days in month based on date? 【发布时间】:2016-02-11 08:09:43 【问题描述】:有没有办法以YYYY-MM-DD
格式从日期中提取本月有多少天?
示例:
对于2016-02-05
,它将给出29
(2016 年 2 月有 29 天)
对于2016-03-12
,它将给出31
对于2015-02-05
,它将给出28
(2015 年 2 月有 28 天)
我正在使用 PostgreSQL
编辑:
LAST_DAY function in postgres 不是我想要的。它返回 DATE 而我期望一个整数
【问题讨论】:
LAST_DAY function in postgres的可能重复 @sagi 这没有回答我的问题。 @java 可能与How to get the number of days in a month in postgresql重复 【参考方案1】:实现这一点的一种方法是从当月的月初减去下个月的月初:
db=> SELECT DATE_TRUNC('MONTH', '2016-02-05'::DATE + INTERVAL '1 MONTH') -
DATE_TRUNC('MONTH', '2016-02-05'::DATE);
?column?
----------
29 days
(1 row)
【讨论】:
【参考方案2】:今天刚需要这个,似乎我想出了与 Mureinik 几乎相同的方法,只是我需要它是数字的。 (PostgreSQL 不能直接从区间转换为数字)
上个月:
select CAST(to_char(date_trunc('month', current_date) - (date_trunc('month', current_date) - interval '1 month'),'dd') as integer)
当月:
select CAST(to_char(date_trunc('month', current_date) + interval '1 month' - date_trunc('month', current_date), 'dd') as integer)
【讨论】:
【参考方案3】:你可以试试下一个:
SELECT
DATE_PART('days',
DATE_TRUNC('month', TO_DATE('2016-02-05', 'YYYY-MM-DD'))
+ '1 MONTH'::INTERVAL
- DATE_TRUNC('month', TO_DATE('2016-02-05', 'YYYY-MM-DD'))
);
注意:这里的日期被使用了两次。并使用了转换函数TO_DATE
【讨论】:
以上是关于如何根据日期获取月份的天数?的主要内容,如果未能解决你的问题,请参考以下文章