我遇到了一个小问题。
我想在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")
再次感谢!
的问候,
答案 0 :(得分:1)
无论好坏,当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 ;