如何在MySQL中创建默认值为当月第一天的日期列?
MySQL设置日期列默认值为当月第一天的方法
MySQL里用CURRENT_TIMESTAMP设置默认值很简单,但要把默认值设为当月第一天,得根据MySQL版本分两种情况处理:
一、MySQL 8.0及以上版本(推荐)
从MySQL 8.0开始,支持直接用自定义函数作为列的默认值,你可以用以下两种方式实现:
方式1:用DATE_FORMAT格式化当前日期
CREATE TABLE foo ( `date` DATETIME DEFAULT DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01') );
DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01')会把当前日期转换成年-月-01的格式,也就是当月第一天。
方式2:用DATE_TRUNC截断到月份起始
CREATE TABLE foo ( `date` DATE DEFAULT DATE_TRUNC('MONTH', CURRENT_DATE()) );
DATE_TRUNC('MONTH', CURRENT_DATE())会直接把当前日期截断到当月的第一天,语法更直观,适合8.0+版本。
二、MySQL 5.7及以下版本
低版本MySQL不支持函数作为列的默认值,这时候需要用触发器来实现:
- 先创建表(无需设置默认值):
CREATE TABLE foo ( `date` DATETIME );
- 创建
BEFORE INSERT触发器,插入时自动填充当月第一天:
DELIMITER // CREATE TRIGGER set_first_day_of_month BEFORE INSERT ON foo FOR EACH ROW BEGIN -- 如果插入时没有指定date列的值,就自动设为当月第一天 IF NEW.`date` IS NULL THEN SET NEW.`date` = DATE_FORMAT(CURRENT_DATE(), '%Y-%m-01'); END IF; END // DELIMITER ;
测试效果
插入一条不指定date的记录:
INSERT INTO foo VALUES (NULL);
查询后会看到date列的值自动变成了当月第一天。
内容的提问来源于stack exchange,提问作者Arthur Caldas
相关产品推荐
相关产品推荐

