查找mysql默认的昨天日期

mutmk8jj  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(346)

我正在通过终端使用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)格式插入数据时,它都采用昨天的日期。
请帮我找到命令。
谢谢,阿米特

dxxyhpgq

dxxyhpgq1#

mysql中的默认值必须是常量。它们不能是函数或表达式(当前时间戳除外)。
资料来源: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;
zbq4xfa0

zbq4xfa02#

根据官方mysql文档https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-另外,你可以这样做:
如果要在创建时存储“昨天”:

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

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

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

根据此答案从现在开始选择记录()-1天:
now()返回日期时间。
间隔按名称工作,例如间隔1天=24小时。
因此,如果你的脚本是cron'd运行在03:00,它将错过前三个小时的记录从'最早'的一天。
使用curdate()-interval 1 day获取全天。无论脚本何时运行,这都将返回到前一天的开始。
希望有帮助!

相关问题