【问题标题】:MySQL - create trigger before insert to replace dateMySQL - 在插入之前创建触发器以替换日期
【发布时间】:2017-01-23 12:40:07
【问题描述】:

我有一个小问题。

我想在 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")

再次感谢! 问候,

【问题讨论】:

  • 为什么不修复程序以“正确”发送数据? (如果需要,当然可以包括对str_to_date 的嵌入式调用)
  • 你好,因为不是我自己写的程序,所以叫syslog-NG(著名的日志管理程序,可以写入MySQL数据库,但是非常有限)

标签: mysql date triggers insert


【解决方案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 ;

【讨论】:

  • 谢谢,它与附加列很好地配合!我将使用此解决方案(因为由于程序限制,syslog-NG,我无法直接在插入查询中进行转换)再次感谢!
猜你喜欢
  • 1970-01-01
  • 2021-09-29
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多