使用BETWEEN填充记录:MSSQL日期查询语句失效求助
解决MSSQL中日期范围查询语句的报错问题
嘿,我一眼就发现你这条SQL语句的问题啦!你写的WHERE (BATCHDT '2018.01.01' AND '2018.05.01')缺少了关键的比较运算符,MSSQL根本没法理解你要对BATCHDT和这两个日期做什么判断,这就是语句无法运行的核心原因。
下面分两种情况给你修正后的正确写法:
情况1:BATCHDT是日期类型(DATE/DATETIME等)
如果你的BATCHDT字段本身就是日期类型,直接用范围比较即可:
- 用
BETWEEN(包含起始和结束日期):
SELECT * FROM tableA WHERE BATCHDT BETWEEN '2018.01.01' AND '2018.05.01';
- 如果你需要排除结束日期当天的数据(比如只到2018.04.30),建议用明确的大于等于和小于:
SELECT * FROM tableA WHERE BATCHDT >= '2018.01.01' AND BATCHDT < '2018.05.02';
情况2:BATCHDT是字符串类型(VARCHAR等)
如果BATCHDT是存储为yyyy.MM.dd格式的字符串,直接用字符串比较可能会出现排序问题(比如字符串"2018.10.01"会被判定为比"2018.05.01"小,这显然不符合日期逻辑),所以最好先转换成日期类型再比较:
SELECT * FROM tableA WHERE CONVERT(DATE, BATCHDT, 102) BETWEEN '2018-01-01' AND '2018-05-01';
这里的102是MSSQL中对应yyyy.mm.dd格式的转换代码,能确保字符串被正确解析为日期。
内容的提问来源于stack exchange,提问作者Jimin Choi
相关产品推荐
相关产品推荐

