2010-08-30 22 views
1

我想將給定的日期和整數轉換爲pl/pgsql函數中的時間戳。我以前從來沒有對pl/pgsql做過任何事情,所以我有點不知所措。如何將int轉換爲pl/pgsql函數中的時間

由於巴勃羅·聖克魯斯答案,走到這一步:

CREATE OR REPLACE FUNCTION to_my_timestamp(mydate date, timeint integer) RETURNS timestamp AS $$ 
DECLARE 
    myhours integer := timeint/10000; 
    myminutes integer := timeint % 10000/100; 
    myseconds integer := timeint % 100; 
    timestring text := myhours || ':' || myminutes || ':' || myseconds; 
BEGIN 
    RETURN (mydate::text || ' ' || timestring)::timestamp; 
$$ LANGUAGE plpgsql; 

select to_my_timestamp('2010-08-12',123456); 

然而,這似乎並沒有爲我工作呢。這是我開始使用pgadmin3在Ubuntu上的錯誤:

ERROR: syntax error at end of input 
LINE 9: $$ LANGUAGE plpgsql; 
     ^

********** Error ********** 

ERROR: syntax error at end of input 
SQL state: 42601 
Character: 377 

任何幫助是極大的讚賞:)

回答

1

試試你的返回值更改爲:

RETURN (mydate::text || ' ' || timestring)::timestamp; 
+0

感謝您的回答!但不幸的是,這是行不通的: 錯誤:語法錯誤在或接近「:」 – 2010-08-30 13:13:11

+0

這應該是mydate :: text - 兩個冒號 – 2010-08-30 14:46:22

+0

@Magnus,@andrash:Yah!對不起'那種類型。只是修復了答案。嘗試一下。它應該工作。 – 2010-08-30 15:22:56

1

你錯過END;

CREATE OR REPLACE FUNCTION to_my_timestamp(mydate date, timeint integer) RETURNS timestamp AS $$ 
DECLARE 
    myhours integer := timeint/10000; 
    myminutes integer := timeint % 10000/100; 
    myseconds integer := timeint % 100; 
    timestring text := myhours || ':' || myminutes || ':' || myseconds; 
BEGIN 
    RETURN (mydate::text || ' ' || timestring)::timestamp; 
END; 
$$ LANGUAGE plpgsql; 
+0

jeez,愚蠢的我...謝謝! – 2010-09-09 09:17:54