PostgreSQL如何连续区间值'2天'

时间:2012-02-21 10:59:29

标签: postgresql datetime intervals

在PostgreSQL中,我想将current_timestampinterval联系起来,如下所示:

select current_timestamp + interval 2||' days'

但是当我这样做时,我得到一个错误:

[Err] ERROR:  syntax error at or near "2"
LINE 1: select current_timestamp + interval 2||' days'

但是,如果我这样做,它可以正常工作:

select current_timestamp + interval '2 days'

为什么一个工作,而另一个工作?

参考以下页面 http://www.postgresql.org/docs/8.0/static/functions-datetime.html

2 个答案:

答案 0 :(得分:25)

部分问题是间隔的标准SQL表达式引用了数字,而不是关键字。所以你必须要小心。

select current_date, current_date + interval '2' day;
--
2012-02-21   2012-02-23 00:00:00

在PostgreSQL中,引用“2天”和“2天”也有效。所以你可能会认为'2'|| '天'是等价的,但事实并非如此。

select current_date, current_date + interval '2' || ' days';
--
2012-02-21   2012-02-21 00:00:02 days

正如A.H.所说,解决方案是将结果字符串转换为间隔。

您也可以使用变量代替2.这将生成2012年的日历。

-- 0 to 365 is 366 days; 2012 is a leap year.
select ('2012-01-01'::date + (n || ' days')::interval)::date calendar_date
from generate_series(0, 365) n;

我使用了最终的演员表,因为date + interval会返回一个时间戳。

答案 1 :(得分:21)

请尝试以下语法:

select current_timestamp + ( 2 || ' days')::interval;

甚至是这个:

select current_timestamp + 2 * interval '1 day';