【问题标题】:CREATE table of date type and use its default value as CURRENT_DATE on MySQL创建日期类型的表并在 MySQL 上使用其默认值作为 CURRENT_DATE
【发布时间】:2018-02-28 17:41:14
【问题描述】:

我尝试在 sql 命令中运行以下代码,但代码行 start_date date DEFAULT CURRENT_DATE 有问题,不知道为什么。我只需要日期。

但如果我将其替换为 start_date datetime DEFAULT CURRENT_TIMESTAMP SQL 将运行,但我的想法是我只需要存储日期而不是日期时间。

如何在不使用时间戳和后者仅转换为日期的情况下做到这一点?

CREATE TABLE advertisement (
    id int not null AUTO_INCREMENT,
    PRIMARY KEY(id),
    summary text DEFAULT null,
    featured_image varchar(50) DEFAULT null, 
    start_date date DEFAULT CURRENT_DATE,
    end_date date not null,
    link text DEFAULT null,
    added_date datetime DEFAULT CURRENT_TIMESTAMP,
    updated_date datetime ON UPDATE CURRENT_TIMESTAMP
)

【问题讨论】:

标签: php mysql sql


【解决方案1】:

documentation 很清楚,这适用于 datetime 列,但不适用于 date 列:

这意味着,例如,您不能为日期设置默认值 列作为函数的值,例如 NOW()CURRENT_DATE。 例外是您可以将CURRENT_TIMESTAMP 指定为默认值 对于TIMESTAMPDATETIME 列。

如果您真的一心想要忽略时间组件,则必须使用触发器来设置值,而不是使用default 约束。

【讨论】:

  • 查询错误:#1067 - 'start_date' 的默认值无效
  • 我知道像 CURRENT_TIMESTAMP 一样,SQL 中也有 CURRENT_DATE 和 CURRENT_TIME 但是它什么时候使用..then
  • @AhsitTamang 。 . .您可以在任何地方使用它们。但不是作为列的默认值。
  • 非常感谢您的建议
【解决方案2】:

通过这种方式,我能够使用CURRENT_DATE 函数。此代码经过 100% 测试。注意,添加新行时该点实例的日期值被保存。

我使用了以下,SQL优先:

CREATE TABLE advertisement (
  id int(11) NOT NULL AUTO_INCREMENT,
  summary text DEFAULT NULL,
  featured_image varchar(50) DEFAULT NULL,
  start_date date DEFAULT NULL,
  end_date date NOT NULL,
  link text DEFAULT NULL,
  added_date datetime DEFAULT CURRENT_TIMESTAMP,
  updated_date datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
)

然后在添加 SQL 时,我使用查询作为

INSERT INTO `advertisement` SET
start_date=CURRENT_DATE(),
end_date='2018-04-02',
added_date='2018-03-01 00:10:33'

谢谢大家的建议。

【讨论】:

  • 请注意,回答帖子不适用于后续问题。如果您对您的解决方案有一些疑问,那么您可以提出一个新问题,或者如果它密切相关,有时可以更新问题。请记住,如果您的问题编辑使现有答案无效,则将更新作为新问题可能会更好。谢谢!
【解决方案3】:

从 MySQL8 开始,这现在是合法的,

CREATE TABLE t (
d DATE DEFAULT (CURRENT_DATE)
);

但请注意,“额外”括号是重要,因为for unknown reasons,这在某种程度上是非法的:

CREATE TABLE t (
d DATE DEFAULT CURRENT_DATE
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2013-12-25
    相关资源
    最近更新 更多