楼主的Date字段是smalldatetime类型吧?是由于smalldatetime的精度不足导致'2009/3/18 23:59:57'被四舍五入到'2009/3/19 00:00:00'的问题。

解决方案 »

  1.   

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

  2.   

    select  * from dbo.view_tb_ad_put
    where ad_id=248 and datediff(day , datetime , '2009-03-18 ') = 0
      

  3.   

    create table tb(ad_id int,put int, [datetime] datetime, [hour] int)
    insert into tb values(248 ,77238 ,'2009-03-18 00:00:00', 21 )
    insert into tb values(248 ,65429 ,'2009-03-18 00:00:00', 22 )
    insert into tb values(248 ,46272 ,'2009-03-18 00:00:00', 23 )
    insert into tb values(248 ,22236 ,'2009-03-19 00:00:00', 0 )
    insert into tb values(248 ,10753 ,'2009-03-19 00:00:00', 1 )
    insert into tb values(248 ,6000  ,'2009-03-19 00:00:00', 2 )
    insert into tb values(248 ,4059  ,'2009-03-19 00:00:00', 3 )
    insert into tb values(248 ,3273  ,'2009-03-19 00:00:00', 4 )
    insert into tb values(248 ,100   ,'2009-03-19 00:00:00', 5 )
    insert into tb values(248 ,1     ,'2009-03-19 00:00:00', 6 )
    insert into tb values(248 ,1     ,'2009-03-19 00:00:00', 8 )
    insert into tb values(248 ,1     ,'2009-03-19 00:00:00', 9 )
    insert into tb values(248 ,1     ,'2009-03-19 00:00:00', 13 )
    goselect  * from tb 
    where ad_id=248 and datediff(day , datetime , '2009-03-18 ') = 0drop table tb/*
    ad_id       put         datetime                                               hour        
    ----------- ----------- ------------------------------------------------------ ----------- 
    248         77238       2009-03-18 00:00:00.000                                21
    248         65429       2009-03-18 00:00:00.000                                22
    248         46272       2009-03-18 00:00:00.000                                23(所影响的行数为 3 行)
    */
      

  4.   

    我这里没有问题。虽说datetime有精度问题但也是是3ms,你的是3s,差那么大
      

  5.   

    或许如钻钻所说,你的是smalldatetime