如何根据日期获取月中的天数?

时间:2016-02-11 08:09:44

标签: sql postgresql

有没有办法在格式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,而我期望一个整数

3 个答案:

答案 0 :(得分:2)

实现这一目标的一种方法是从当月开始减去下个月的开头:

db=> SELECT DATE_TRUNC('MONTH', '2016-02-05'::DATE + INTERVAL '1 MONTH') - 
            DATE_TRUNC('MONTH', '2016-02-05'::DATE);
 ?column? 
----------
 29 days
(1 row)

答案 1 :(得分:0)

您可以尝试下一步:

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

答案 2 :(得分:0)

今天只需要这个,似乎我想出的和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)