我试图运行以下查询:
[SQL]INSERT INTO `Games` VALUES ('18', '21', '101', '98', '2013-10-30', '1190', '2013');
[Err] 1644 - date error
我有一个触发器:
if (New.date < 1900-01-01 or New.date > 2015-01-01) then
signal sqlstate '45000' set message_text = "date error";
End if;
其中games.date显然是第五个领域。
我不确定为什么我会收到此错误,因为它看起来应该可以正常工作。
答案 0 :(得分:1)
1900-01-01
不是约会对象 - 它是由减号分隔的三个整数,并将评估为1982年。至少,您想要用单引号将其包围起来使它成为一个字符串文字,但我也不建议 - 你应该总是明确地将字符串转换为具有适当格式的日期:
if (New.date < STR_TO_DATE('1900-01-01', '%Y-%m-%d') or
New.date > STR_TO_DATE('2015-01-01', '%Y-%m-%d')) then
signal sqlstate '45000' set message_text = "date error";
End if;