2016-04-28 11 views
0

私は、アプリケーションログのタイムスタンプを "Apr 28 09:54:46"という形式で処理しています。これは、以下のNEW.timestampの値の形式です。次のように挿入する前にトリガーを解析しようとしています。挿入前のトリガー内のmysql str_to_date

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

これはヌル値を返します。誰かがこれにいくつかの光を当てることができる場合は、非常に感謝します。

+0

挿入前から挿入後に変更した場合は、同じ問題がありますか? –

+0

タイムスタンプのフォーマットは、MySQLがフィールドの定義であるdatetimeとは理解できません。したがって、挿入後に操作を行うためにデータを挿入することはできません。 – khitman

答えて

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は、トリガの前に引数をチェックします。だから私は、ダミーの列 'tmp' 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'); 
+0

Bernd、応答に感謝します。しかし、私は提案されたフォーマットを使用して同じ結果を得ます。 – khitman

+0

興味深いのは、これはCLIからは動作しますが、トリガーでは動作しないということです。サンプル日付文字列の – khitman

+0

は年ではありませんか? "Apr 28 09:54:46" - これは正しいですか?正しいものを投稿する –

関連する問題