2015-03-19 35 views
0

我剛開始使用PostgreSQL並且有疑問。我創建了一個表格自動更新表格中的值

CREATE TABLE B2S(
       StudentID INTEGER 
       ,Book_Issued VARCHAR(20) 
       ,Issue_Date DATE 
       ,Due_Date DATE 
       ) 

我希望Due_Date爲30 + Issue_Date。我該怎麼做?

+0

是的,你的回答工作。非常感謝:) – John 2015-03-20 16:33:14

回答

0

你有3個選項做到這一點

  • 選項 - 1

您可以使用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) 

  • 選項2

,或者你可以創建一個功能類似下面,這裏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')) 

  • 選項3

通過創建觸發器,@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_dateB2S

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') 
0

如果你想自動更新,而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 
]; 
+0

我應該做一個還是兩個? – John 2015-03-19 05:39:32

+0

這不適用於Postgres – 2015-03-19 08:28:46