2015-05-04 46 views
0

我有一個網站,我可以更新一個行的日期,通過點擊表格,當我更改值並按下輸入其更新的數據庫。更新前的MySQL觸發器 - 從字符串中設置dateformat

我想要什麼:在日期字段中。只需鍵入mm/dd(例如05-20)按回車即可。

那麼我的觸發器應:

CREATE TRIGGER before_transactions_update 
BEFORE UPDATE 
ON Transactions FOR EACH ROW 

BEGIN 
-- variable declarations 
    declare inputDate integer; 


-- trigger code 
-- get month and day 
-- LEFT(inputDate, 2); RIGHT(inputDate, 2) 
-- STR_TO_DATE('2015,MONTH(LEFT),DAY(RIGHT)','%Y,%m,%d'); 
    SET INSERTED.date = 2015-month-day-00-00-00; 

END; 

這就是我「嘗試」,或者至少就我來了我自己。 MySQL的工作臺阻止我在我的var聲明,它告訴我,我需要一個分號後聲明,我似乎並不需要

所以我一直在谷歌搜索幾個小時,我遇到了死衚衕作爲新手在MySQL所以任何人都可以填寫空白或點我在正確的方向,

這將是巨大

回答

0

您不能直接通過輸入參數到觸發除非輸入某處update statement

您還需要在觸發器中指定分隔符。

如果您的輸入值始終採用m-d的形式,如示例中所示,並且year是當年,則以下觸發器應執行此項工作。

delimiter // 
CREATE TRIGGER before_transactions_update BEFORE UPDATE 
ON Transactions 
FOR EACH ROW 
BEGIN 
    if length(new.date) = 5 then 
    set new.date = concat(year(curdate()),'-',new.date); 
    end if ; 
END;// 

delimiter ; 
+0

This results in 0000-00-00 00:00:00 ..所以我試着添加:set new.date = concat(year,「 - 」,(curdate()),' - ',new .date,'00:00:00');對於時間戳的正確格式,沒有運氣,而且,你能解釋一下你的代碼嗎? (特別是if語句)預先感謝 –

+0

您需要確保'date'的值得到正確發送。正如我所說的,它必須是'm-d'格式,如果你使用其他格式,它將不起作用。 if語句是說你已經有了一些正確日期的數據,並且說你正在更新mysql的某些內容,那麼它可能會產生衝突。或者更好地檢查字符串長度爲'if length(new.date)= 5',表示您將數據發送爲「m-d」格式,以便將年份數據添加到其中,否則保持原樣。 –

+0

還提供更新查詢,您將在可能的情況下執行更新查詢中'date'的值。 –