如何查询5-6个月前的账户记录?SQL语句报错求解
问题解决:查询5-6个月前开户的账户记录
报错原因
你写的SQL里,start date(字段名带空格的话需要用双引号包裹,建议规范命名为start_date)是日期类型,而INTERVAL '5 month'是时间间隔类型,直接用BETWEEN让这两种不同类型的数据做比较,数据库找不到对应的运算规则,所以抛出operator does not exist: date = interval错误。
正确SQL写法
需要把时间间隔和当前日期计算,得到具体的日期范围,再和开户日期字段比较。同时注意BETWEEN的顺序:必须把更早的日期(6个月前)放在前面,较近的日期(5个月前)放在后面,否则会查不到数据。
如果字段名是start_date:
SELECT * FROM Account WHERE start_date BETWEEN CURRENT_DATE - INTERVAL '6 month' AND CURRENT_DATE - INTERVAL '5 month';
如果字段名确实是带空格的start date(不推荐这种命名方式):
SELECT * FROM Account WHERE "start date" BETWEEN CURRENT_DATE - INTERVAL '6 month' AND CURRENT_DATE - INTERVAL '5 month';
补充说明
CURRENT_DATE会获取当前系统日期,减去对应的时间间隔后得到的是具体的日期值,和start_date类型匹配,就能正常比较。- 如果你的数据库是MySQL,语法类似,获取当前日期可以用
CURDATE(),写法如下:
SELECT * FROM Account WHERE start_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 MONTH) AND DATE_SUB(CURDATE(), INTERVAL 5 MONTH);
内容的提问来源于stack exchange,提问作者SQL_IS_Tasty
相关产品推荐
相关产品推荐

