【问题标题】:SELECT all date interval from timestamp to timestamp选择从时间戳到时间戳的所有日期间隔
【发布时间】:2015-08-02 05:45:29
【问题描述】:

有没有办法选择两个时间戳之间的所有日期。

假设我有 2 个时间戳 2/1/2015 和 2/28/2015 有没有办法在这之间选择所有的日子

输出:

days
--------
2/1/2015  |
2/2/2015  |
2/3/2015  |
...
2/26/2015 |
2/27/2015 |
2/28/2015 |

编辑:

我正在尝试计算从日期到日期之间每天创建的一些记录,该表只有一个 timecreated 字段,其中包含创建时间的时间戳,我需要做的是生成一个包含所有日期之间的表2 个日期,如果当天没有创建记录,则计数为 0,或者创建的记录数为 X。

【问题讨论】:

    标签: sql postgresql date


    【解决方案1】:

    当然。怎么样:

    SELECT * FROM table WHERE days>='2015-02-01' AND days<='2015-02-28'

    【讨论】:

    • 在我回答后更改问题不公平! :)
    【解决方案2】:

    如果您想要一个实际包含日期的表格,这是一种方法:

    --gives a table which contains every date between start & end (inclusive)
    declare @startdate datetime = '05/01/2015';
    declare @enddate datetime = '05/20/2015';
    
    declare @result table(d datetime);
    declare @diff int = datediff(d,@startdate,@enddate);
    declare @i int = 0;
    while(@i<=@diff) begin
      insert into @result(d) values (@startdate + @i);
      set @i = @i + 1;
    end;
    
    select * from @result
    

    【讨论】:

    • 谈论 PostgreSQL,而不是 T-SQL :)
    • 糟糕,我的错误。这就解释了为什么在我尝试时接受的答案实际上不起作用:)。下次我会多注意标签的。
    【解决方案3】:

    您可以使用generate_series 生成两个日期之间的所有日期,并使用时间戳列与您的表进行连接:

    SELECT a_date, count(days) FROM 
    generate_series('2015-01-01'::timestamp, '2015-03-31', '1 day') a_date
      left outer join 
        my_table
      on my_table.days = a_date
    group by a_date
    

    【讨论】:

    • 谢谢 generate_series 正是我所需要的。
    • 不错!我以前从未使用过,但它会很有用。
    【解决方案4】:

    您可以在列上使用 count() 来指示是否有记录。假设您的专栏名为“记录”:

    SELECT count(record) as NbRecord FROM table WHERE days>='2015-02-01' AND days

    【讨论】:

      猜你喜欢
      • 2021-01-28
      • 2014-11-15
      • 2017-05-31
      • 2013-06-03
      • 2015-04-25
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多