写订单过期时间,随手写了 DATE_ADD(NOW(), 7),MySQL 直接报语法错误。这个函数不接受裸数字,必须带上 INTERVAL 和单位。
正确写法
标准形式是 DATE_ADD(日期, INTERVAL 数值 单位)。比如七天后的时间:DATE_ADD(NOW(), INTERVAL 7 DAY)。单位可以是 DAY、HOUR、MINUTE、SECOND、WEEK、MONTH、QUARTER、YEAR。单位是关键字,不要加引号。
往前推用负数
INTERVAL -7 DAY 就是减七天。也可以用 DATE_SUB(NOW(), INTERVAL 7 DAY),效果一样。查询最近七天的订单,常见写法是 WHERE create_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)。
几个容易踩的点
- 单位写成 DAYS 会报错,MySQL 只认单数形式。
- 日期字段是字符串时,先确认格式是 YYYY-MM-DD,否则结果可能为 NULL。
- 加月份遇到月末会自动调整,1 月 31 日加一个月得到 2 月 28 日或 29 日,不是 3 月 3 日。
- NOW() 取的是服务器时区,跨时区业务要统一时区再计算。
和 ADDDATE 的区别
ADDDATE 有两种写法,ADDDATE(日期, 7) 可以直接加天数,也可以写成 INTERVAL 形式。DATE_ADD 只认 INTERVAL 形式。团队里统一用一种,别混着写,读代码的人会省心很多。
记住模板:DATE_ADD(字段, INTERVAL 数量 单位)。把单位写对,这个函数基本不会出问题。