2011-12-07 13 views
3

私はmysqlimportを使用して大量の表の挿入を行います(重複した主キーを置き換える)。いくつかのテーブルには、 '0000-00-00'という値を含むレコードを持つ日付時刻の列があります。私が望むのは、これらの '0000-00-00'の値を検出し、 '1950-01-01'で置き換えるトリガーです。それ以外の場合は、レコードのdatetime値を保持します( '0000-00-00'でない場合)。 。MYSQLケースステートメントを使用して日時値を設定する

私は次のことを試してみました:

CREATE TRIGGER set_datetime BEFORE INSERT ON tbl 
FOR EACH ROW 
CASE 
WHEN date_col='0000-00-00' THEN SET date_col='1950-01-01'; 
END CASE 

ありがとうございました。

EDIT

更新の試み:

CREATE TRIGGER set_datetime BEFORE INSERT ON tbl 
FOR EACH ROW 
IF (NEW.date_col='0000-00-00') THEN 
SET NEW.date_col='1950-01-01'; 
END IF; 

はまだSET部分でエラーを取得します。

EDIT 2

WORKING:

DELIMITER $$ 
CREATE TRIGGER insert_check BEFORE INSERT ON ar 
FOR EACH ROW 
BEGIN 
    IF NEW.delivery_date='0000-00-00' THEN 
     SET NEW.delivery_date='1950-01-01'; 
    END IF; 
END; $$ 
DELIMITER ; 
+0

どのようなエラーが、してください? – TehShrike

答えて

4

使用IF THEN

IF (NEW.date_col = '0000-00-00') THEN 
    SET NEW.date_col='1950-01-01'; 
END IF; 
+0

私に正しい方向を教えていただきありがとうございます。 – btl

+0

あなたの答えは、BTW、+1! – RolandoMySQLDBA

2
CREATE TRIGGER set_datetime BEFORE INSERT ON tbl 
FOR EACH ROW 
IF YEAR(NEW.date_col)=0 THEN 
    SET NEW.date_col='1950-01-01 00:00:00'; 
END IF; 

それを試してみます!

+0

'BEFORE INSERT'の' OLD.'へのアクセスは意味をなさない。 – a1ex07

+0

ありがとうございます。それを私が直した !!! – RolandoMySQLDBA

+0

マイナスを削除してください。 – a1ex07

0

したい場合、または必要性、「ケース」を使用するように、これは動作するはずです:

SET NEW.date_col=CASE WHEN NEW.date_col='0000-00-00' THEN ='1950-01-01' 
WHEN NEW.date_col='something else' THEN 'whatever' 
ELSE 'default' 
END CASE; 
関連する問題