2015-05-04 67 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'的值。 –