【问题标题】:How to insert only date part in to datetime colomn in sql [closed]如何仅将日期部分插入到sql中的日期时间列[关闭]
【发布时间】:2020-10-14 16:19:55
【问题描述】:

我想在我的 sql 表中插入自动生成的日期。但是当同时使用日期时间和时间戳数据类型时,它也会生成时间。但我只需要生成日期部分。我该怎么做呢

【问题讨论】:

  • 请显示您正在使用的确切 SQL,以及任何相关数据,以及您得到的结果。从理论上讲,如果您只是在没有任何时间的情况下插入了一个日期字符串,您仍然会在表中获得一个日期时间,但时间将是午夜 (00:00:00),所以没关系。如果您使用该编程语言中的内置日期/时间类型从另一个应用程序插入,那么您可能必须在插入之前截断/重置时间组件(如果尚未完成)。如果您需要更多指导,另请参阅 minimal, reproducible example

标签: mysql date datetime


【解决方案1】:

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,这会派上用场。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2015-03-17
    • 2019-07-01
    • 2010-11-22
    相关资源
    最近更新 更多