寻找 MySQL 默认昨天日期

Posted

技术标签:

【中文标题】寻找 MySQL 默认昨天日期【英文标题】:Looking for MySQL Default yesterday date 【发布时间】:2018-11-04 14:56:06 【问题描述】:

我正在通过终端使用 mysql。以下是我用来创建表的命令,但它在 YYYY-MM-DD HH:MM:SS 中显示日期(例如:2018-05-25 14:12:47)

create table test (foo int, ts timestamp default CURRENT_TIMESTAMP);

但我希望每次以 (YYYY-MM-DD) 格式插入数据时都使用昨天的日期。

请帮我找到命令。

谢谢, 阿米特

【问题讨论】:

我相信这个帖子已经回答了这个问题:***.com/questions/12163263/… 不,亲爱的,我正在寻找仅昨天日期的自动更新...没有与您分享的帖子的链接。 @AmitRai 该链接清楚地表明您不能在 MySQL 中执行此操作。您将需要找到其他方法。 【参考方案1】:

根据MySQL官方文档https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add,你可以这样做:

如果你想在创作时存储“昨天”:

ts TIMESTAMP NOT NULL DEFAULT NOW() - INTERVAL 1 DAY

如果您想在每次更新时存储“昨天”:

ts TIMESTAMP NOT NULL DEFAULT NOW() ON UPDATE NOW() - INTERVAL 1 DAY

根据这个回答Select records from NOW() -1 Day:

NOW() 返回一个 DATETIME。

并且 INTERVAL 按名称工作,例如间隔 1 天 = 24 小时。

因此,如果您的脚本被 cron'd 在 03:00 运行,它将错过第一个 从“最古老”的一天开始的三个小时的记录。

要获得一整天,请使用 CURDATE() - INTERVAL 1 DAY。这将得到 回到前一天的开始,无论何时 脚本正在运行。

希望对你有帮助!

【讨论】:

表达式不允许这样的默认值。【参考方案2】:

MySQL 中的默认值必须是常量。它们不能是函数或表达式(CURRENT_TIMESTAMP 除外)。

来源:http://dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html

此外,您还可以根据需要向表中添加触发器

简单地创建一个没有约束的表

create table test (foo int, ts timestamp );

然后给这个表添加一个触发器

CREATE TRIGGER settime
BEFORE INSERT on test 
FOR EACH ROW BEGIN
   IF new.`ts ` is null THEN
    SET new.`ts ` = DATE_ADD(NOW(), INTERVAL -1 DAY);
    END IF;
END;

【讨论】:

以上是关于寻找 MySQL 默认昨天日期的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 日期函数 今天明天昨天......

MySQL 日期函数 今天明天昨天......

MySQL日期更改为JPA保存后的昨天日期

MySQL - 当时间戳是日期的一部分时,如何查找昨天的记录

如何在参数中指定两个默认日期

text Mysql的获取昨天明天的日期