cast('2004-11-01 00:00:00' as datetime)

解决方案 »

  1.   

    就结果来看,第一答案有问题:2004-11-03 00:00:00不该出现这个结果,请楼主确认一下,你select出的字段和条件中用的reportdate一样吗?如果不一样,出现下面的结果也属正常因为是字符串日期,所以不需要楼上的cast转换
      

  2.   

    条件里面写的这样
    and reportdate<='2004-11-02 23:59:30'不会出现2004-11-03 00:00:00的
      

  3.   

    我来回答你这是为什么:
    在SQLServer中对于日期格式有两种
    1.datetime
    2.smalldatetime
    对于datetime在SQLServer中的数据长度为8位,该类型数据通常用来表示长日期格式,而smalldatetime的数据长度为4位,通常用来表达短日期格式.而且对于这两种数据格式的转换SQLserver中有一定的规则
    具体规则是:
    对于一个datetime格式的日期2004-01-01 23:59:29 和 2004-01-02 23:59:30如果转换为smalldatetime格式,系统会将23:59:30(不包括30)直接舍去后面的小时分秒,如2004-01-01 23:59:29->2004-01-01而对于23:59:30(包括30)以后系统会进位如2004-01-02 23:59:30->2004-01-03
    这就是为什么.
    从你的问题来看你,你数据库中采用的是smalldatetmie的格式进行存储,而你用了datatime的格式进行查询,这也是有问题的,虽然SQL能执行,但是会有细微的区别,区别就在以上我所描述的.
    给分吧,楼主,我说得够仔细了.
      

  4.   

    reportdate这个字段是8位的日期型吧
      

  5.   

    恩,知道问题所在了,就是peacedog所说的,我用的是smalldatetime就出现那种情况了,谢谢各位,结贴了!