我正在尝试运行以下查询:
[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显然是第五个字段。
我真的不知道为什么我会出现这个错误,因为它看起来应该很好。
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;