MySQL-在插入之前创建触发器以替换日期
我有个小问题 我想在MySQL中使用名为date的时间戳字段插入一个表 如果我使用str_to_date查询进行常规插入,它会很好地工作。 但是,我的程序不支持在查询中使用函数。 所以我需要找到另一种方法,我正在考虑使用触发器,例如:MySQL-在插入之前创建触发器以替换日期,mysql,date,triggers,insert,Mysql,Date,Triggers,Insert,我有个小问题 我想在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,
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")
它给我一条错误消息,说“日期字段不能为空”
你知道怎么给这个触发器编码吗
一个常规的工作查询(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处理
值时。问题是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 ;
不管是好是坏,MySQL处理值时会转换为日期。问题是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 ;
你为什么不修正你的程序,让它“正确”地发送数据呢?(如果需要,当然可以包括对str_to_date
的嵌入式调用)嗨,因为我自己没有编写这个程序,它叫syslog NG(这是一个著名的日志管理程序,能够写入MySQL数据库,但非常有限),为什么不修复程序以“正确”发送数据?(如果需要的话,当然可以包括对str_to_date
的嵌入式调用)嗨,因为我自己没有编写这个程序,它叫syslog NG(这是一个著名的日志管理程序,能够写入MySQL数据库,但非常有限)。谢谢,它可以很好地与附加列配合使用!我将使用此解决方案(由于程序限制,我无法在insert查询中直接进行转换,syslog NG),再次感谢!谢谢,它与附加列配合得很好!我将使用此解决方案(由于程序限制,我无法在insert查询中直接进行转换,syslog NG),再次感谢!