2014-02-13 55 views
13

CURRENT_TIMESTAMP的我有PostgreSQL中的過程,我要添加的分鐘數到CURRENT_TIMESTAMP像下面添加分鐘PostgreSQL中

timestamp_var:= CURRENT_TIMESTAMP +間隔'20分鐘;

但是分鐘數是一個參數。

我們有這個功能嗎?

請幫助我在這種情況下

CREATE OR REPLACE FUNCTION modify_time(id users.id%TYPE, min integer) AS $$ 
BEGIN 
UPDATE 
     users 
    SET 
     modified_at = CURRENT_TIMESTAMP 
    WHERE 
     user_id = id; 
END 
$$ LANGUAGE plpgsql; 

我想補充分鐘分鐘CURRENT_TIMESTAMP的 感謝

+0

提供完整的代碼 –

+0

感謝您的回覆阿希什,我的代碼很簡單,我只是想給10或20分鐘,我保存之前添加到當前時間戳到我的數據庫,我說我的代碼如上 – OneCart

+1

你的標題和標籤指的是PL/SQL(Oracle)......但你的代碼是plpgsql(Postgres)。這是兩個非常不同的東西。請更正標題和標籤。 FWIW,Oracle的方式是'numToDsInterval'。 – stv

回答

22

您可以用整數乘區間。下面給你一個時間戳未來二分:

select current_timestamp + (20 * interval '1 minute') 

或者,如murison在另一個answer這個問題提到,有一個表達這種更簡潔的方式:

select current_timestamp + (20 ||' minutes')::interval 

所以,你的代碼可能是這樣的:

CREATE OR REPLACE FUNCTION modify_time(id users.id%TYPE, min integer) AS $$ 
BEGIN 
UPDATE 
     users 
    SET 
     modified_at = CURRENT_TIMESTAMP + (min * interval '1 minute') 
    WHERE 
     user_id = id; 
END 
$$ LANGUAGE plpgsql; 
+0

謝謝先進的stv,看起來它在Oracle中有效,抱歉我沒有問清楚,我在用PostgreSQL 8.4,能幫我嗎? – OneCart

+0

我不知道PostgreSQL,但你應該改變你的問題標題。 PL/SQL是一個僅限於Oracle的野獸。也許日期數學版本將適用於PostgreSQL。 – stv

+0

重新完成了答案。我在Postgres 9.0中測試了原始選擇,但是我沒有每天使用Postgres,所以這可能不是最好的解決方案。 – stv

17

的另一種方式是

select current_timestamp + (20 ||' minutes')::interval