寻找MySQL Default昨天的日期

时间:2018-05-25 08:57:15

标签: mysql sql unix terminal

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

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

Screenshot for the same

但我希望默认情况下每次以(YYYY-MM-DD)格式插入数据时都需要昨天日期。

请帮我找到命令。

谢谢, 阿米特

2 个答案:

答案 0 :(得分:0)

根据官方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的工作方式如命名,例如: INTERVAL 1天= 24小时。

     

因此,如果你的脚本是cron要在03:00运行,它将错过第一个   来自最古老的'的三小时记录一天。

     

要获得全天使用CURDATE() - INTERVAL 1天。这会得到   不管什么时候回到前一天的开头   脚本运行。

希望它有所帮助!

答案 1 :(得分:0)

MySQL中的DEFAULT值必须是常量。它们不能是函数或表达式(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;