插入触发器之前的mysql str_to_date

时间:2016-04-28 14:02:41

标签: mysql

我正在处理应用程序日志的时间戳,格式为“Apr 28 09:54:46”,这是下面NEW.timestamp中值的格式。尝试使用触发器进行解析,然后按以下方式插入。

CREATE DEFINER=`xxxxx`@`%` 
TRIGGER `<trigger_name>` 
BEFORE 
INSERT ON `<table_name>` FOR EACH ROW 
SET NEW.timestamp = STR_TO_DATE('NEW.timestamp', '%d %b %Y %H:%i:%S'), NEW.Id = UUID();

这返回一个空值。如果有人能够对此有所了解,那将非常感激。

1 个答案:

答案 0 :(得分:0)

STR_TO_DATE('NEW.timestamp', '%d %b %Y %H:%i:%S') 

错了。不要引用NEW.timestamp

很抱歉,我无法发表评论,在那里你看不到反对。

使用:

STR_TO_DATE(`NEW`.`timestamp`, '%d %b %Y %H:%i:%S')

我发现了这个问题。 Mysql在触发之前检查参数。所以我添加了一个虚拟列&#39; tmp&#39; varchar(32)并使用它。

CREATE DEFINER=`root`@`%` TRIGGER myt
BEFORE INSERT ON times 
FOR EACH ROW 
SET NEW.ts = STR_TO_DATE(NEW.tmp, '%d %b %Y %H:%i:%S'), NEW.Id = UUID(),NEW.tmp='';

INSERT INTO times (id,tmp) VALUES (2,'28 Apr 2016 14:34:46');