我剛開始使用PostgreSQL並且有疑問。我創建了一個表格自動更新表格中的值
CREATE TABLE B2S(
StudentID INTEGER
,Book_Issued VARCHAR(20)
,Issue_Date DATE
,Due_Date DATE
)
。
我希望Due_Date爲30 + Issue_Date。我該怎麼做?
我剛開始使用PostgreSQL並且有疑問。我創建了一個表格自動更新表格中的值
CREATE TABLE B2S(
StudentID INTEGER
,Book_Issued VARCHAR(20)
,Issue_Date DATE
,Due_Date DATE
)
。
我希望Due_Date爲30 + Issue_Date。我該怎麼做?
你有3個選項做到這一點
您可以使用Date/Time Operators,
例如您ISSUE_DATE是2015-03-19
然後DUE_DATE應2015-04-19
,這樣你就可以在插入語句中使用'2015-03-18'::date + interval '30' DAY
insert into B2S values (1,'Yes','2015-03-18','2015-03-18'::date + interval '30' DAY)
,或者你可以創建一個功能類似下面,這裏argIssue_date
是你Issue_Date
日期的價值和功能將返回Due_Date
。
create or replace function fn_get_due_date(argIssue_date date) returns date
as
$$
select (argIssue_date::date + interval '30' DAY)::date
$$
language sql
,並調用這個函數在你插入語句
insert into B2S values (1,'Yes','2015-03-18',fn_get_due_date('2015-03-18'))
通過創建觸發器,@Daniel Sagayaraj已經回答了這個
看到闡述觸發OP的問題
CREATE OR REPLACE FUNCTION tgr_due_date() RETURNS trigger AS '
BEGIN
NEW.Due_Date := NEW.Issue_Date::date + interval ''30'' DAY;
RETURN NEW;
END;
' LANGUAGE plpgsql;
分配創建觸發器tgr_due_date
表B2S
CREATE TRIGGER due_date_insert
BEFORE INSERT OR UPDATE ON B2S
FOR EACH ROW
EXECUTE PROCEDURE tgr_due_date();
最後插入語句
insert into B2S (StudentID,Book_Issued,Issue_Date) values (1,'Yes','2015-05-18')
如果你想自動更新,而DUE_DATE插入一條新記錄,你可以在sql中使用Triggers。
例子:
CREATE or REPLACE TRIGGER trg1
AFTER
INSERT ON emp1
FOR EACH ROW
BEGIN
[logic goes here]
END;
CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name
ON table_name
[
Trigger logic goes here
];
我應該做一個還是兩個? – John 2015-03-19 05:39:32
這不適用於Postgres – 2015-03-19 08:28:46
是的,你的回答工作。非常感謝:) – John 2015-03-20 16:33:14