MySQL觸發器中IF條件判斷問題


前幾天修改了一張回答表的觸發器,結果保存草稿的時候報錯:Data truncation: Truncated incorrect datetime value: '',經排查是觸發器中一條判斷的問題,我們來看原來的語句:

IF CONCAT(new.delete_flag,new.status)!=CONCAT(old.delete_flag,old.status) AND new.delete_flag=0 AND new.status=0 AND IFNULL(new.publish_time,'')!='' AND new.publish_time>DATE_ADD(NOW(),INTERVAL -30 DAY) THEN
    INSERT IGNORE INTO kid_follow_feed(receiver,operator,type,content_type,content_id,time) VALUES(new.user_id,new.user_id,3,3,new.id,new.publish_time);
    SET v_ret = redis_command_v2('LPUSH', 'mq:CalcFollowFeed', CONCAT(json_object('oper',new.user_id,'type',3,'contentType',3,'contentId',new.id)));
END IF;

原來的語句中先判斷狀態是否有變化,如果沒有變化,再判斷是否發布狀態並且有發布時間,同時發布時間要在30天之內,結果這條語句就報錯了,原因是保存草稿的時候發布時間是空字符串,修改成這樣就沒問題了:

  IF new.delete_flag=0 AND new.status=0 AND IFNULL(new.publish_time,'')!='' THEN
    IF CONCAT(new.delete_flag,new.status)!=CONCAT(old.delete_flag,old.status) AND new.publish_time>DATE_ADD(NOW(),INTERVAL -30 DAY) THEN
      INSERT IGNORE INTO kid_follow_feed(receiver,operator,type,content_type,content_id,time) VALUES(new.user_id,new.user_id,3,3,new.id,new.publish_time);
      SET v_ret = redis_command_v2('LPUSH', 'mq:CalcFollowFeed', CONCAT(json_object('oper',new.user_id,'type',3,'contentType',3,'contentId',new.id)));
    END IF;
  END IF;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM