最近的项目中发现两个同样业务的模块显示的数据不同,经测试发现是其所使用的两个类似的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条数据是怎么来的?

解决方案 »

  1.   

    where CONVERT(varchar(10), Examination.OpenDate, 120) BETWEEN '2009-07-01' AND '2009-12-31'后者要这样才不会出问题。
      

  2.   

    --try
    where CONVERT(varchar(10), Examination.OpenDate, 120) BETWEEN '2009-07-01' AND '2009-12-31'
      

  3.   

    你可以看一下CONVERT输入不同参数输出的不同格式。select convert(varchar(10),getdate(),111)
    select convert(varchar(10),getdate(),120)
      

  4.   

    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'
    '-' 这个和'/'这个不一样的吧
      

  5.   


    where Examination.OpenDate BETWEEN '2009-07-01' AND '2009-12-31 23:59:59'日期比较的最佳方案。