SQL中使用CURDATE()实现360天回溯查询的WHERE语句问题求助
解决SQL WHERE子句中CURDATE()查询360天数据的问题
嘿,我来帮你梳理下你写的几个语句的问题,再给你正确的写法:
首先,逐个分析你尝试的写法哪里不对:
WHERE LastPD > CURDATE()- interval 360 days;:语法错误在于interval的单位应该用单数,正确单位是DAY而非days;另外规范写法里INTERVAL通常大写(多数数据库不区分大小写,但大写更符合标准)。WHERE LastPD > CURDATE()-360;:直接给日期减数字的逻辑错误。数据库会把CURDATE()返回的日期转换成数值格式(比如20240520这类整数),再做数值减法,得到的结果不是合法日期(比如20240520-360=20240160),和LastPD(日期类型)自然无法正确比较。WHERE LastPD > CURDATE-360;:函数调用缺失括号,CURDATE是函数必须写成CURDATE(),不然数据库会把它当成列名查找,你的表显然没有这个列,必然报错。
正确的两种标准写法:
- 使用
INTERVAL关键字的写法:
WHERE LastPD > CURDATE() - INTERVAL 360 DAY;
- 使用
DATE_SUB函数的写法(MySQL等数据库常用):
WHERE LastPD > DATE_SUB(CURDATE(), INTERVAL 360 DAY);
这两种写法都会准确计算出当前日期往前推360天的日期,和LastPD做标准日期比较,完全符合你的需求。
内容的提问来源于stack exchange,提问作者KelvinW
相关产品推荐
相关产品推荐

