【问题标题】:mysql Check if date is greater than 0000-00-00mysql 检查日期是否大于 0000-00-00
【发布时间】:2017-11-05 17:55:45
【问题描述】:

我希望我的 orderedDate 列 (使用日期类型) 不允许 null 或 0000-00-00

我已将orderedDate 列设置为非空,但在使用插入时

INSERT INTO Purchase(custName, price)
VALUES('Max Wong', 10.00)

订购日期为 0000-00-00。我认为这是因为当没有给出其他值时它是默认值。

我也试过

ALTER TABLE Purchase
ADD CHECK (orderedDate > '0000-00-00');

(还有orderedDate > 0000-00-00 和orderedDate > 0)

我读了试试

SET mysql_mode = 'NO_ZERO_DATE' 

但是没有用。

我在网上看的时候看到很多php的建议,但我必须使用sql。

【问题讨论】:

  • 如果是我 .. 我会运行一个查询,用“标准”日期替换所有零日期 .. 甚至早于您的业务。例如1970-01-01 ...然后您应该将该列标记为默认CURRENT_TIMESTAMP 或类似的东西。完成后..您可以简单地使用WHERE date BETWEEN DATE(NOW()) AND DATE(1970-01-01)
  • 您可能想了解如何在 MySQL 中使用触发器作为检查约束:stackoverflow.com/questions/9734920/…

标签: mysql sql date datetime


【解决方案1】:

MySQL 不支持 CHECK 约束。它会解析它们,因此不会引发错误,但不会保存或强制执行它们。

如果启用 NO_ZERO_DATE SQL 模式,如果使用 0000-00-00,MySQL 会给出警告,而不是错误。

如果启用 NO_ZERO_DATE 模式严格模式,则会报错。

此模式是从 MySQL 5.7 开始的默认模式。

欲了解更多信息:https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

【讨论】:

    猜你喜欢
    • 2013-07-12
    • 2015-07-19
    • 1970-01-01
    • 2017-09-21
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 2016-06-04
    相关资源
    最近更新 更多