2012-02-21 20 views
9

Trong PostgreSQL Tôi muốn concat các current_timestamp với một interval như sau:PostgreSQL làm thế nào để concat giá trị khoảng '2 ngày'

select current_timestamp + interval 2||' days' 

Nhưng khi tôi làm, tôi nhận được một lỗi:

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

Nhưng nếu tôi làm như vậy, nó hoạt động chính xác:

select current_timestamp + interval '2 days' 

Tại sao một người làm việc chứ không phải người khác?

Với tham chiếu đến các trang sau http://www.postgresql.org/docs/8.0/static/functions-datetime.html

+0

Bạn có thực sự ** sử dụng 8.0 không? (liên kết của bạn với manul sử dụng phiên bản đó) –

Trả lời

18

Một phần của vấn đề là các biểu thức SQL tiêu chuẩn cho khoảng thời gian báo giá số, nhưng không phải là từ khóa. Vì vậy, bạn phải cẩn thận.

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

Trong PostgreSQL, trích dẫn như '2 ngày' và '2 ngày' cũng hoạt động. Vì vậy, bạn có thể nghĩ rằng '2' || 'days' sẽ tương đương, nhưng không phải.

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

Giải pháp, như A.H. cho biết, là bỏ chuỗi kết quả thành một khoảng thời gian.

Bạn cũng có thể sử dụng một biến thay cho 2. Điều này tạo ra một lịch cho 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; 

tôi sử dụng dàn diễn viên chính thức cho đến nay, vì ngày + khoảng thời gian trả về một dấu thời gian.

16

Vui lòng thử cú pháp sau:

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

hoặc thậm chí một này:

select current_timestamp + 2 * interval '1 day'; 
Các vấn đề liên quan