我尝试在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
)
答案 0 :(得分:1)
documentation非常明确,这适用于datetime
列,但不适用于date
列:
这意味着,例如,您无法设置日期的默认值 列为
NOW()
或CURRENT_DATE
等函数的值。 例外情况是您可以指定CURRENT_TIMESTAMP
作为默认值 适用于TIMESTAMP
和DATETIME
列。
如果您真的想要忽略时间组件,则必须使用触发器来设置值,而不是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'
谢谢大家的建议。