最近的项目中发现两个同样业务的模块显示的数据不同,经测试发现是其所使用的两个类似的SQL语句的差异:
一个在条件项中是:
where CONVERT(varchar(10), Examination.OpenDate, 111) BETWEEN '2009/07/01' AND '2009/12/31'
而另外一个是
where CONVERT(varchar(10), Examination.OpenDate, 111) BETWEEN '2009-07-01' AND '2009-12-31'经测试前者查询出数据10432条,而后者查询出数据8700条,二者相差1000多条数据。CONVERT(varchar(10), Examination.OpenDate, 111)是把日期转化成 yyyy/MM/dd 格式,使用如下SQL进行测试:if '2010/07/11' between '2010-07-09' and '2010-07-12'
print 'yes'
else
print 'no'
输出的是 no ,测试的结果好像是在MSSQL2005中使用斜线与横线,无法比较成功,所以有趣的问题就出来了,上面第二条SQL查询的8000条数据是怎么来的?
一个在条件项中是:
where CONVERT(varchar(10), Examination.OpenDate, 111) BETWEEN '2009/07/01' AND '2009/12/31'
而另外一个是
where CONVERT(varchar(10), Examination.OpenDate, 111) BETWEEN '2009-07-01' AND '2009-12-31'经测试前者查询出数据10432条,而后者查询出数据8700条,二者相差1000多条数据。CONVERT(varchar(10), Examination.OpenDate, 111)是把日期转化成 yyyy/MM/dd 格式,使用如下SQL进行测试:if '2010/07/11' between '2010-07-09' and '2010-07-12'
print 'yes'
else
print 'no'
输出的是 no ,测试的结果好像是在MSSQL2005中使用斜线与横线,无法比较成功,所以有趣的问题就出来了,上面第二条SQL查询的8000条数据是怎么来的?
解决方案 »
- com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: 错误怎么解决
- 如何对于日期类型的记录做判断呢?
- 求助,关于数据库只读
- 求一SQL语句,重新生成产品的顺序号
- 我提交了更新语句,为什么提示命令行已执行,但是数据库却没有发生变化。
- string转换成date型
- 我想统计表中根据user分组的count,和某一字段a为空的count,我这样写,但提示出错,未找到预期的from,请问怎么回事啊?
- 新手求老师:如果一个存贮过程中有多个批,这些批这间如何共享参数呢?(即共享接收过来的参数)
- 关于将SQL执行的脚本生成bat文件的问题?
- 很菜的问题,请问SQL Server默认的数据库类型是什么样的?我怎么可以将一个数据库汇出来(比如汇到Excel或Access中)?
- 求教SQL语句 不重复求和
- 求一个曾经安装过SQL-2008的人帮帮小弟,关于安装的问题
where CONVERT(varchar(10), Examination.OpenDate, 120) BETWEEN '2009-07-01' AND '2009-12-31'
select convert(varchar(10),getdate(),120)
而另外一个是
where CONVERT(varchar(10), Examination.OpenDate, 111) BETWEEN '2009-07-01' AND '2009-12-31'
'-' 这个和'/'这个不一样的吧
where Examination.OpenDate BETWEEN '2009-07-01' AND '2009-12-31 23:59:59'日期比较的最佳方案。