2015-04-20 35 views
1

我有3列的表 - 一個時間戳,一個真實的,和一個字符串。字符串列包含各種時間頻率值(如分鐘,小時,天)。我想在我的時間戳列中取值,並在其他列中添加值。例如,我想這樣做使用PostgreSQL的日期間隔和SELECT語句

select timestamp '2015-04-20 01:00' + interval '2 hours' 

,如果我有一個表與下面的列和值

action_start_time rate frequency 
2015-04-20 01:00 2  hours 

回答

1

您可以使用下面的查詢ratefrequency列轉換爲間隔

select format('%s %s',rate,frequency)::interval 
from actions 

,然後就用action_start_time

select action_start_time + format('%s %s',rate,frequency)::interval my_timestamp 
from actions 

demo-sqlfiddle

+0

這裏提供的所有不錯的選擇。謝謝。我選擇了這個選項,因爲它看起來很簡單。 – IanAlburp

2

簡單:

SELECT action_start_time + rate * ('1'|| frequency)::interval 

的所有訣竅是在一些間隔值的使用乘法:

postgres=# select 3 * interval '1 hour'; 
┌──────────┐ 
│ ?column? │ 
╞══════════╡ 
│ 03:00:00 │ 
└──────────┘ 
(1 row) 

您可以簡單地創建任何間隔值,而無需使用字符串進行操作。當然,應該會更好,如果你的列frequency是原生的PostgreSQL interval類型。

0
select action_start_time + (rate::varchar||' '||frequency)::interval 

開始與那麼action_start_time取率(轉換爲字符)和附加的空間,然後將頻率來達到像'1小時或'3天等。然後澆鑄該字符串的字符串爲間隔,並添加到原action_start_time

+0

添加間隔雖然這個答案很可能是正確的,有用的,最好,如果你有一些說明連同它得到確切的時間戳解釋它如何幫助解決問題。如果存在導致其停止工作並且用戶需要了解其曾經工作的變化(可能不相關),這在未來變得特別有用。 –