sqlserver用between '2011-8-8' and'2011-8-8' 时,根本查不出数据,就算是between '2011-8-8' and'2011-8-9' ,但2011-8-9的数据查出来也不对,怎么解决,急求,谢谢! 

解决方案 »

  1.   

    select *
    from tb
    where convert(varchar(10),日期字段,120) between '2011-08-08' and '2011-08-09'
      

  2.   

    col between '2011-8-8' and'2011-8-9'
    ==col >= '2011-8-8' and col <= '2011-8-9'
      

  3.   


    注意col <= '2011-8-9'并不是'2011-8-9'这天的数据,而是只有'2011-8-9'这个时间点的数据包含,要精确找出'2011-8-9'这天所有数据应该
    col >= '2011-8-9' and col < '2011-8-10'不用1楼的方法是考虑效率,函数会使得索引效能下降
      

  4.   

    between '2011-8-8' and'2011-8-8'
    会隐式转换为
    between '2011-08-08 00:00:00' and'2011-08-08 00:00:00'是查不出来数据的
    改为'2011-8-9'查出来不对,是什么意思,你把话说完整了好不好
      

  5.   

    declare @date datetime
    set @date = '2011-08-08'
    select @date 
    --你看一下这个结果是什么,然后看看这样你between '2011-08-08'
     and '2011-08-08'
     的结果
      

  6.   

    不是问题,搂主对datetime类型没有很好理解是原因
      

  7.   

    col >= '2011-8-8' and col <= '2011-8-9'
      

  8.   

    declare @date datetime
    set @date = '2011-08-08'
    select @date 
    select convert(varchar(10),@date,120)
    --看一下这两者有什么区别
      

  9.   

    谢谢!各位的方法我都试了, 
    AcHerat的把时间给convert了就什么也查不出了,NBDBA的用法和between and 的用法是一样的,也不可以,我也试过between '2011-8-4 00:00:00' and '2011-8-4 23:59:59'但它连8-5的也查出来了,但是8-5号的不对,怎么办?急求!
      

  10.   

    NBDBA、第二次说的正好解决了sqlserver 的between and 两端值取不到的问题,太感谢了,非常感谢大家的帮忙。
     
      

  11.   

    是smalldatetime类型的,有关系吗?请说一下,谢谢!
      

  12.   

    字符串转换为datetime或smalldatetime类型,是有精度差别的
    数据类型          范围                                          精确度  
    datetime       1753 年 1 月 1 日到 9999 年 12 月 31 日     3.33 毫秒 
    smalldatetime  1900 年 1 月 1 日到 2079 年 6 月 6 日       1 分钟按smalldatetime类型 
    between '2011-8-4 00:00:00' and '2011-8-4 23:59:59'
    等于
    between '2011-8-4' and '2011-8-5' 
      

  13.   

    默认 是 00:00:00的。所以在对时间做处理的时候,and 后面的时间(enddate)往往在程序内部会加一天
    enddate.DateTime.Date.AddDays(1)
      

  14.   

    类型要相同才能between。  如果不相同建议LZ convert()