2015-09-28 84 views
-1

我有兩列RegisterDateActiveDays(INT)添加詮釋爲DateTime

我想ActiveDays添加到RegisterDate和比較它的日期表,現在

我USEE下面的查詢

select RegisterDate + INTERVAL cast(ActiveDays as text) || ' day' ..... 

,但它導致錯誤:

syntax error at or near "cast"

回答

1

要解釋你的錯誤,你有這樣的:

INTERVAL cast(ActiveDays as text) || ' day' 

乍一看,這看起來像它應該工作一樣:

INTERVAL '5 day' 

但是這裏INTERVAL是實際上不是一個轉換運算符,它是對文本字符串類型的註釋 - 基本上,定義了引號的含義。

如果切換它交給一個普通CAST,它的工作:

CAST(CAST(ActiveDays as text) || ' day' as INTERVAL) 

或者你可以使用的Postgres的非標準::投運營商,這使得它多一點可讀性:

(ActiveDays::text || ' day')::interval 

或者,如klin's answer所示,您可以採取不同的方法,並將一天乘以適當的整數:

ActiveDays * INTERVAL '1 day' 

請注意,在這裏我使用的是以前嘗試使用的文字語法。

0

用途:

select RegisterDate + ActiveDays* '1d'::interval ... 
-- or simply as unit is `1 day` (thanks to @a_horse_with_no_name) 
select RegisterDate + ActiveDays 

例子:

select '2015-01-01'::date + 5 

     ?column? 
--------------------- 
2015-01-06 00:00:00 
(1 row) 
+0

如果單位爲天,您可以直接添加一個整數:'current_date + 1' –