寻找 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 默认昨天日期的主要内容,如果未能解决你的问题,请参考以下文章