关于AnnounceDate between '2008-12-16 0:00:00'  and '2008-12-17 23:59:59'的疑问!
AnnounceDate 是smalldate型的,
执行得到的结果竟然包括 '2008-12-18 0:00:00'  为什么呢??

解决方案 »

  1.   

    AnnounceDate between '2008-12-16 00:00:00'  and '2008-12-17 23:59:59'
    把所有的位补齐.
      

  2.   

    dawugui ,按你写的执行了。结果一样
      

  3.   

    数据类型               范围                                        精确度  
    datetime       1753 年 1 月 1 日到 9999 年 12 月 31 日        3.33 毫秒
    smalldatetime  1900 年 1 月 1 日到 2079 年 6 月 6 日           1 分钟
     
      

  4.   

    select cast('2008-12-17 23:59:59' as smalldatetime)
    结果是2008-12-18 00:00:00
    select cast('2008-12-17 23:59:59' as datetime)
    结果是'2008-12-17 23:59:59' 
    为什么呢!!!
      

  5.   

    --Returns time as 12:35.
    SELECT CAST('2003-05-08 12:35:29.998' AS smalldatetime);
    GO
    --Returns time as 12:36.
    SELECT CAST('2003-05-08 12:35:29.999' AS smalldatetime);
    GO请多看联机丛书的例子..谢谢.
      

  6.   

    29.998 秒或以下的 smalldatetime 值會向下捨入到最接近的分鐘;29.999 秒或以上的值會向上捨入到最接近的分鐘。
    datetime 值會捨入到 .000、.003 或 .007 秒的遞增,如下表所示。
    以上内容來自MSDN。
    2008-12-17 23:59:59 在SMALLDATETIME字段裏面根本就不存在,會自動變成2008-12-18 0:00:00
      

  7.   

    29.998 秒或以下的 smalldatetime 值會向下捨入到最接近的分鐘;29.999 秒或以上的值會向上捨入到最接近的分鐘。
    datetime 值會捨入到 .000、.003 或 .007 秒的遞增,如下表所示。
    以上内容來自MSDN。
    2008-12-17 23:59:59 在SMALLDATETIME字段裏面根本就不存在,會自動變成2008-12-18 0:00:00不信你可以在SQL裏面建個SMALLDATETIME建個字段測試下,SMALLDATETIME只精確到分鐘。
      

  8.   

    declare @t datetime
    set @t = '1999-9-9 23:59:59.999'
    select cast(@t as datetime)
    --1999-09-10 00:00:00.000
    --datetime精确到最近的3/1000,smalldatetinme位分钟
      

  9.   

    select cast('2008-12-17 23:59:30' as smalldatetime) 结果2008-12-18 00:00:00
    select cast('2008-12-17 23:59:29' as smalldatetime) 结果2008-12-17 23:59:00

    smalldatetime从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据精确到分钟。29.998 秒或更低的 smalldatetime 值向下舍入为最接近的分钟,29.999 秒或更高的 smalldatetime 值向上舍入为最接近的分钟。我明白了