Vij*_*ade 4 postgresql datetime
我想在特定时间段内生成一系列月份。
我试过了:
select GENERATE_SERIES( '06/25/2016'::DATE, '12/15/2016'::DATE, '1 month' )
Run Code Online (Sandbox Code Playgroud)
它返回:
select GENERATE_SERIES( '06/25/2016'::DATE, '12/15/2016'::DATE, '1 month' )
Run Code Online (Sandbox Code Playgroud)
结束日期有问题。我想要的结果如下:
"generate_series"
"2016-06-25 00:00:00-06"
"2016-07-25 00:00:00-06"
"2016-08-25 00:00:00-06"
"2016-09-25 00:00:00-06"
"2016-10-25 00:00:00-06"
"2016-11-25 00:00:00-07"
Run Code Online (Sandbox Code Playgroud)
我正在使用 PostgreSQL。
埃文解释了为什么不能自己generate_series()
做你想做的事。但它可以通过一个简单的来完成UNION
:
select generate_series('2016-06-25'::timestamp, '2016-12-15', '1 month')
as g_date
union
select '2016-12-15'
-- order by g_date
;
Run Code Online (Sandbox Code Playgroud)
或UNION ALL
:
select generate_series('2016-06-25'::timestamp,
'2016-12-15' - interval '1 day',
'1 month') as g_date
union all
select '2016-12-15' ;
Run Code Online (Sandbox Code Playgroud)
另请注意,generate_series()
输出是timestamp without
timezone
类型的。如果你想要一个date
类型,你需要强制转换:
select generate_series('2016-06-25'::timestamp,
'2016-12-15' - interval '1 day',
'1 month')::date as g_date
union all
select '2016-12-15'::date ;
Run Code Online (Sandbox Code Playgroud)