选择从时间戳到时间戳的所有日期间隔

时间:2015-05-20 19:32:45

标签: sql postgresql date

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

说我有2个时间戳2/1/2015和2015年2月28日 有没有办法在所有日期之间选择

输出:

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

编辑:

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

不确定。怎么样:

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

答案 2 :(得分:0)

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

--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

答案 3 :(得分:0)

您可以在列上使用count()来表示是否有记录。说你的专栏被称为&#34;记录&#34; :

SELECT count(record)as NbRecord FROM table WHERE days&gt; =&#39; 2015-02-01&#39; AND天&lt; =&#39; 2015-02-28&#39;