我正在通过终端使用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)格式插入数据时,它都采用昨天的日期。请帮我找到命令。谢谢,阿米特
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;
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获取全天。无论脚本何时运行,这都将返回到前一天的开始。希望有帮助!
2条答案
按热度按时间dxxyhpgq1#
mysql中的默认值必须是常量。它们不能是函数或表达式(当前时间戳除外)。
资料来源:http://dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html
此外,您还可以根据需要向表中添加触发器
简单地创建一个没有约束的表
然后将触发器添加到此表中
zbq4xfa02#
根据官方mysql文档https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-另外,你可以这样做:
如果要在创建时存储“昨天”:
如果要在每次更新时存储“昨天”:
根据此答案从现在开始选择记录()-1天:
now()返回日期时间。
间隔按名称工作,例如间隔1天=24小时。
因此,如果你的脚本是cron'd运行在03:00,它将错过前三个小时的记录从'最早'的一天。
使用curdate()-interval 1 day获取全天。无论脚本何时运行,这都将返回到前一天的开始。
希望有帮助!