CREATE日期类型表,并在MySQL上使用其默认值CURRENT_DATE

时间:2018-02-28 17:41:15

标签: php mysql sql

我尝试在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
    )

2 个答案:

答案 0 :(得分:1)

documentation非常明确,这适用于datetime列,但不适用于date列:

  

这意味着,例如,您无法设置日期的默认值   列为NOW()CURRENT_DATE等函数的值。   例外情况是您可以指定CURRENT_TIMESTAMP作为默认值   适用于TIMESTAMPDATETIME列。

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

答案 1 :(得分:0)

通过这种方式,我可以使用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'

谢谢大家的建议。