You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询start_date加1年在今日起5天内的记录?现有SQL不生效如何解决

问题原因

你的SQL语句存在两个核心错误导致无法得到正确结果:

  • 你将start_date +1 year放在双引号中,数据库会将这段内容识别为普通字符串,不会针对start_date字段做实际的日期运算
  • 日期运算、范围判断的函数使用不规范,如果你是做周年类(比如纪念日、生日到期提醒)的查询,只需要比对月日范围的话,还需要额外处理年份逻辑,避免跨年后日期范围判断失效

修正写法

下面给出不同场景的可用写法,以最常用的MySQL为例:

按完整日期范围判断(如果你的今日实际为2021-09-05,仅需要判断加1年后的完整日期落在未来5天内)

SELECT ID, start_date 
FROM my_table 
WHERE 
  DATE_ADD(start_date, INTERVAL 1 YEAR) 
  BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 5 DAY);

仅比对月日范围(适配你给出的示例场景,今日为2020-09-05,忽略年份只判断月日落在未来5天范围内,适合周年提醒类需求)

SELECT ID, start_date 
FROM my_table 
WHERE 
  DATE_FORMAT(start_date, '%m%d') 
  BETWEEN DATE_FORMAT(CURDATE(), '%m%d') 
  AND DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 5 DAY), '%m%d');

其他常见数据库可以对应调整语法即可:

  • PostgreSQL:用start_date + INTERVAL '1 year'做日期加法,CURRENT_DATE取当前日期,TO_CHAR(start_date, 'mmdd')格式化月日
  • SQL Server:用DATEADD(YEAR, 1, start_date)做日期加法,CAST(GETDATE() AS DATE)取当前日期,FORMAT(start_date, 'MMdd')格式化月日

内容的提问来源于stack exchange,提问作者karlosuccess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:24:01