繁体   English   中英

MySQL-在插入替换日期之前创建触发器

[英]MySQL - create trigger before insert to replace date

我有一个小问题。

我想在一个表中插入一个带有时间戳字段的表,该表在MySQL中称为date

如果我使用带有str_to_date的查询进行常规插入,则效果很好。 但是,我的程序不支持在查询中使用函数。 所以我需要寻找另一种方法,我正在考虑使用触发器,例如:

DELIMITER //
CREATE TRIGGER audit_oracle_date
BEFORE INSERT ON audit_oracle FOR EACH ROW
BEGIN
SET NEW.date = STR_TO_DATE(NEW.date, "%d %b %Y %H:%i:%s");
END
//
DELIMITER ;

但它不起作用。 触发器已创建,但是在尝试输入类似查询时:

insert into audit_oracle values("20 Jan 2017 18:01:25","IFOMCP00","sdfdsfds","zerzerez","aaaa","SYSDBA","1","'select * from bla'","ddd","eee","2")

它给我一条错误消息,提示“日期字段不能为NULL”

请问如何编写此触发器的任何想法?

常规的有效查询(带有str_to_date)例如:

insert into audit_oracle values(str_to_date("20 Jan 2017 18:01:25", "%d %b %Y %H:%i:%s"),"IFOMCP00","sdfdsfds","zerzerez","aaaa","SYSDBA","1","blabla","ddd","eee","2")

再次感谢 ! 问候,

不管是好是坏,迄今为止的转换都是在MySQL处理VALUES时发生的。 问题是MySQL无法识别日期格式。

我的建议是像上一个示例一样,当场进行转换。

如果您确实想使用触发器来执行此操作,则可以添加另一列(即字符串),将其插入该列,然后使用触发器:

insert into audit_oracle(datestr, . . .)
     values('20 Jan 2017 18:01:25', 'IFOMCP00', 'sdfdsfds', 'zerzerez', 'aaaa', 'SYSDBA', '1', '''select * from bla''', 'ddd', 'eee', '2');

然后您的触发器将如下所示:

DELIMITER //
CREATE TRIGGER audit_oracle_date
BEFORE INSERT ON audit_oracle FOR EACH ROW
BEGIN
    SET NEW.date = STR_TO_DATE(NEW.datestr, "%d %b %Y %H:%i:%s");
END
//
DELIMITER ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM