2015-06-26 34 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