我一个表,用插入时间做了主键,用的是dateTime类型,因为我查的是最近3个月的记录,貌似这样比较快,设了默认字段是getDate(),精确到了毫秒。我查询的时候取出当前时间前3个月的时间SET @inTime=DATEADD(m,-3,GETDATE())
但这样始终出现的是  01  1 1900  1:07AM  ,这样的类型,这是不行的,因为我是必须要精确到毫秒的,然后我查资料SET @inTime=CONVERT(VARCHAR(30),DATEADD(m,-3,GETDATE()),9),这样精确到毫秒了,但是这个是字符串类型,和主键的一对比完全不行,我把这个值提取出来SELECT * FROM Give WHERE toUserId=1 OR toRoomId=1 AND inTime=CONVERT(DATETIME,'04  8 2012  4:06:57:920PM')出现了N条记录,我这个是主键,为何出现了N条记录,我写> 或者 <记录也一样,真是晕了.还有convert DATETIME始终出现 01  1 1900  1:07AM  ,这样的类型,无法精确到毫秒,怎么回事

解决方案 »

  1.   

    -- 1、@inTime datetime
    declare @inTime datetime
    SET @inTime=DATEADD(m,-3,GETDATE())
    select @inTime-- 2、注意逻辑优先级
    WHERE (toUserId=1 OR toRoomId=1) AND inTime=CONVERT(DATETIME,'04 8 2012 4:06:57:920PM')
      

  2.   

    datetime精度只有1/300秒,不是1ms
    要ms精度用datetime2日期转换格式参考MSDN
    http://msdn.microsoft.com/zh-cn/library/ms187928%28v=SQL.100%29.aspx
      

  3.   

    WHERE toUserId=1 OR toRoomId=1 AND inTime=CONVERT(DATETIME,'04 8 2012 4:06:57:920PM')这句话的逻辑判断顺序是怎样的WHERE (toUserId=1 OR toRoomId=1) AND inTime=CONVERT(DATETIME,'04 8 2012 4:06:57:920PM')这2句的逻辑区别是什么,求大侠指导
      

  4.   


    用四则运算优先级比喻吧,AND相当于乘除级别,OR相当于加减的级别。
      

  5.   


    那就是and优先级高吧,可是我已经写了and后面的条件,应该先去判断and,把所有的都排除了,为何出现了多条记录
      

  6.   

    WHERE (toUserId=1 OR toRoomId=1) AND inTime=CONVERT(DATETIME,'04 8 2012 4:06:57:920PM')WHERE toUserId=1 OR ( toRoomId=1 AND inTime=CONVERT(DATETIME,'04 8 2012 4:06:57:920PM') )OR是什么意思
      

  7.   

    AND级别高,是不是应该先算AND的逻辑,然后再与前面OR结合嘛
      

  8.   

    datetime做主键,除非没有相同时间的数据,否则这是一个隐患,相同时间数据不允许INSERT。
      

  9.   


    从第一天接触逻辑运算,我一直是按四则运算的优先级来理解逻辑的优先级的,确实有相通的地方:
    true<>0,false=0 and 确实是乘的结果,or 是加的结果。位运算全部优先级别相同。一般人我还不告诉他 呵呵