【问题标题】: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 而我期望一个整数

【问题讨论】:

标签: sql 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-22
        • 1970-01-01
        • 1970-01-01
        • 2020-07-31
        • 1970-01-01
        • 2013-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多