【问题标题】:MYSQL Trigger set datetime value using case statementMYSQL 触发器使用 case 语句设置日期时间值
【发布时间】:2011-12-07 17:43:25
【问题描述】:

我正在使用 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

工作:

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 ;

【问题讨论】:

    标签: mysql triggers set case


    【解决方案1】:

    使用IF THEN

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

    【讨论】:

      【解决方案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; 
      

      试试看!!!

      【讨论】:

      • BEFORE INSERT 中访问OLD. 没有意义。
      【解决方案3】:

      如果您想要或需要使用“案例”,那么这应该可以:

      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;
      

      【讨论】:

        猜你喜欢
        • 2013-08-24
        • 2017-04-02
        • 2013-02-06
        • 1970-01-01
        • 2017-04-13
        • 1970-01-01
        • 2015-01-10
        • 2015-02-09
        • 1970-01-01
        相关资源
        最近更新 更多