Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-在插入之前创建触发器以替换日期_Mysql_Date_Triggers_Insert - Fatal编程技术网

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

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,

我有个小问题

我想在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")
它给我一条错误消息,说“日期字段不能为空”

你知道怎么给这个触发器编码吗

一个常规的工作查询(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),再次感谢!