2015-06-26 32 views
0

我們有一個看起來像數據表:提取日期在PostgreSQL

|id|date1  |timestamp1   | 
----------------------------- 
|1 |2015-06-23|2015-06-23 16:02:00| 
----------------------------- 
|2 |2015-01-02|2015-01-02 11:32:00| 

我試圖創建一個功能和觸發器,它不工作,看起來是這樣的:

CREATE OR REPLACE FUNCTION insert_date1_trg_func() 
RETURNS trigger AS 
$BODY$ 
begin 
update schema.table set 
date1 = extract(date from new.timestamp1) 
where id = new.id; 
return null; 
end; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100; 

trigger

CREATE TRIGGER insert_date1_trg_func() 
AFTER INSERT or update 
ON schema.table 
FOR EACH ROW 
EXECUTE PROCEDURE insert_date1_trg_func(); 

我得到一個錯誤類型日期,但表達式雙精度。

+0

最新錯誤? –

+0

以前發佈爲http://stackoverflow.com/q/31025100/398670 –

回答

1

如果你想在更新觸發設置「日期1」,它應該是這樣的:

CREATE OR REPLACE FUNCTION insert_date1_trg_func() RETURNS trigger AS $BODY$ 
BEGIN 
    NEW.date1 = date_trunc('day', NEW.timestamp1)::date; 
    RETURN NEW; 
END; $BODY$ LANGUAGE plpgsql STABLE; 

觸發:

CREATE TRIGGER insert_date1_trg_func() 
BEFORE INSERT OR UPDATE ON schema.table 
FOR EACH ROW EXECUTE PROCEDURE insert_date1_trg_func(); 

注意觸發器應觸發之前插入或更新或更改將不會保留在數據庫中。

+0

@Patick:我收到一個錯誤:時間戳單位「日期未識別」。謝謝。 – Taz

+0

使用'date_trunc()',查看更新後的答案。 – Patrick

+0

感謝@Patrick,它的工作。 – Taz