问题描述
我想将自动生成的日期插入到我的sql表中。但是,在同时使用dateime和timestamp数据类型时,它也会增加时间。但是我只需要修饰日期部分。我该怎么办
解决方法
CURDATE()
returns the present date就像NOW()
返回MySQL中的当前日期/时间一样。
并且,DATE(any_datetime_or_timestamp)
retrieves just the date赋予了任何DATE
,DATETIME
或TIMESTAMP
值。
所以您可以做类似的事情
INSERT INTO tbl (something,day) VALUES ('something',CURDATE())
获取具有当前日期的行,而无需时间。
MySQL可让您declare columns something like this自动生成时间戳。对于DATETIME,您需要版本8以上。
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
这些不允许您仅自动插入日期,没有时间。但是当您查询表格时,您可以
SELECT DATE(ts) tsdate,DATE(dt) dtdate
仅获取日期部分。
或者,对于最新版本,如果只需要日期,则可以在表中使用所谓的generated column。像这样的东西。
CREATE TABLE t2 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,tsdate DATE AS DATE(ts)
);
如果您只需要在该日期日期列上使用index,就可以派上用场。