我一个表,用插入时间做了主键,用的是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 ,这样的类型,无法精确到毫秒,怎么回事
但这样始终出现的是 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 ,这样的类型,无法精确到毫秒,怎么回事
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')
要ms精度用datetime2日期转换格式参考MSDN
http://msdn.microsoft.com/zh-cn/library/ms187928%28v=SQL.100%29.aspx
用四则运算优先级比喻吧,AND相当于乘除级别,OR相当于加减的级别。
那就是and优先级高吧,可是我已经写了and后面的条件,应该先去判断and,把所有的都排除了,为何出现了多条记录
从第一天接触逻辑运算,我一直是按四则运算的优先级来理解逻辑的优先级的,确实有相通的地方:
true<>0,false=0 and 确实是乘的结果,or 是加的结果。位运算全部优先级别相同。一般人我还不告诉他 呵呵