【问题标题】:How to get how many days passed since start of this year?如何获取今年开始以来已经过去了多少天?
【发布时间】:2016-05-20 11:05:48
【问题描述】:

我有一个查询,它使用需要知道自当年 1 月 1 日以来经过了多少天。

这意味着如果查询运行在例如:

2017 年 1 月 2 日,它应该返回 2(自 1 月 1 日以来已过去 2 天 2017)。

2016 年 2 月 10 日,它应该返回 41(因为自 1 日以来已经过去了 41 天 2016 年 1 月)。

基本上它需要从Curent Date 中取出Current Year 并计算自1/1/(Year). 以来的天数

我有当前年份:SELECT EXTRACT(year FROM CURRENT_DATE);

我创建了 1 月 1 日:

select (SELECT EXTRACT(year FROM CURRENT_DATE)::text || '-01-01')::date

我如何获得从这个日期到Current_Date 的差值?

基本上这个问题可以是给定两个日期,它们之间有多少天

类似age(timestamp '2016-01-01', timestamp '2016-06-15') 不好,因为我只需要几天后的结果。而年龄则以年、月和日为单位。

【问题讨论】:

    标签: sql postgresql date select


    【解决方案1】:

    一种更简单的方法可能是从日期中提取年份(“doy”)字段:

    db=> SELECT EXTRACT(DOY FROM CURRENT_DATE);
     date_part 
    -----------
            41
    

    如果你需要它作为一个数字,你可以直接转换它:

    db=> SELECT EXTRACT(DOY FROM CURRENT_DATE)::int;
     date_part 
    -----------
            41
    

    注意:结果 41 是在今天 2 月 9 日运行查询生成的。

    【讨论】:

    【解决方案2】:

    给定两个日期,它们之间的天数

    只需subtract one from the other


    在您的情况下,您可以将 current_date 舍入到年初,然后从当前日期中减去:

    select current_date - date_trunc('year', current_date)::date
    

    ::date 强制转换是获得整数结果所必需的,否则结果将是一个区间。

    【讨论】:

      【解决方案3】:

      另一种解决方案是使用 DATEDIFF

       SELECT DATE_PART('day', now()::timestamp - '2016-01-01 00:00:00'::timestamp);
      

      【讨论】:

        猜你喜欢
        • 2010-12-26
        • 1970-01-01
        • 2011-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多