2016-04-28 13 views
0

Ich arbeite mit einem Zeitstempel aus Anwendungsprotokolle im Format von "Apr 28 09:54:46", das ist das Format des Werts in NEW.timestamp unten. Versuchen, mit einem Trigger vor dem Einfügen in der folgenden Weise zu analysieren.mysql str_to_date innerhalb vor dem Einfügen Trigger

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(); 

Dies gibt einen Nullwert zurück. Wenn jemand etwas Licht darauf werfen könnte, würde es sehr geschätzt werden.

+0

Wenn Sie es vor dem Einfügen nach dem Einfügen geändert haben, haben Sie das gleiche Problem? –

+0

Das Format des Zeitstempels ist was es ist, dann versteht MySQL das nicht als Datetime, was die Definition des Feldes ist. Daher kann ich die Daten nicht einfügen, um nach dem Einfügen eine Operation auszuführen. – khitman

Antwort

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

ist falsch. Zitiere nicht NEW.timestamp

Entschuldigung, ich kann es nicht in Kommentar setzen, da Sie die Backticks nicht sehen können.

Verwendung:

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

Ich habe das Problem gefunden. Mysql überprüft das Argument, bevor es im Trigger ist. Also habe ich eine Dummy-Spalte 'tmp' varchar (32) hinzugefügt und verwende diese.

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'); 
+0

Bernd, Danke für die Antwort. Allerdings bekomme ich das gleiche Ergebnis mit dem vorgeschlagenen Format. – khitman

+0

Interessanter Artikel ist, dass dies von CLI funktioniert, aber nicht im Trigger. – khitman

+0

in Ihrem Beispieldatenstring ist kein JAHR? "28. April 09.54.46" - ist das richtig? oder post die richtige –

Verwandte Themen