MYSQL Trigger使用case语句设置datetime值

时间:2011-12-07 17:43:26

标签: mysql triggers set case

我正在使用mysqlimport进行批量表插入(替换重复主键)。有几个表的日期时间列包含值'0000-00-00'的记录。我想要的是一个触发器,它会检测这些'0000-00-00'值并替换为'1950-01-01',否则将日期时间值保留在记录中(即当它不是'0000-00-00'时)

我尝试了以下内容:

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

谢谢。

修改

更新尝试:

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部分仍然出现错误。

编辑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 ;

3 个答案:

答案 0 :(得分:3)

使用IF THEN

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

答案 1 :(得分:1)

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; 

试一试!!!

答案 2 :(得分: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;