TSQL与日期不相等的运算符

时间:2013-04-17 16:28:46

标签: sql sql-server tsql

SELECT * FROM TABLE_NAME
WHERE 
([DateOfLastTransaction] <> @p29) 
OR ([DateOfLastTransaction] <> @p30)

@p29='2012-11-30 00:00:00.000',  3 records
@p30='2012-04-17 00:00:00.000'  1 record

我从SQL分析器中获取了查询并删除了不必要的位。删除了OR和@ p30参数返回3条记录。是影响它的“OR”吗?

我有4个记录(需要排除)和2个日期,我的查询不起作用。这是为什么?我做的事情非常愚蠢吗?

2 个答案:

答案 0 :(得分:3)

我相信您打算使用AND逻辑运算符。 e.g。

SELECT *
FROM Table_Name
WHERE 
     [DateOfLastTransaction] != @p29
     AND [DateOfLastTransaction] != @p30

所有内容都将通过OR运算符返回,因为[DateOfLastTransaction]可能符合第一次逻辑比较但在第二次运算时无效。

答案 1 :(得分:2)

考虑这个陈述

SELECT * FROM TABLE_NAME
WHERE 
   [DateOfLastTransaction] <> @p29 
OR [DateOfLastTransaction] <> @p30

除非[DateOfLastTransaction]为空 或@ p29 = @ p29 = [DateOfLastTransaction]
它将永远返回true

如果日期不匹配 true或true计算结果为true

如果日期与@ p29相匹配 false或true评估为true

如果日期与@ p30相符 true或false评估为true