如何在SQL中的日期时间列中仅插入日期部分

问题描述

我想将自动生成的日期插入到我的sql表中。但是,在同时使用dateime和timestamp数据类型时,它也会增加时间。但是我只需要修饰日期部分。我该怎么办

解决方法

CURDATE() returns the present date就像NOW()返回MySQL中的当前日期/时间一样。

并且,DATE(any_datetime_or_timestamp) retrieves just the date赋予了任何DATEDATETIMETIMESTAMP值。

所以您可以做类似的事情

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,就可以派上用场。