T-SQL XOR运算符

时间:2011-03-23 21:05:39

标签: sql-server tsql xor

SQL Server(T-SQL)中是否有XOR运算符或等效函数?

9 个答案:

答案 0 :(得分:51)

有一个按位XOR运算符 - 插入符号(^),即:

SELECT 170 ^ 75

结果是225。

对于逻辑XOR,使用ANY关键字而不是全部,即

WHERE 5 > ANY (SELECT foo) AND NOT (5 > ALL (SELECT foo))

答案 1 :(得分:33)

使用布尔代数,很容易证明:

A xor B = (not A and B) or (A and not B)


A B | f = notA and B | g = A and notB | f or g | A xor B    
----+----------------+----------------+--------+--------    
0 0 | 0              | 0              | 0      | 0    
0 1 | 1              | 0              | 1      | 1    
1 0 | 0              | 1              | 1      | 1    
1 1 | 0              | 0              | 0      | 0

答案 2 :(得分:15)

MS SQL only short form(自SQL Server 2012以来):

1=iif( a=b ,1,0)^iif( c=d ,1,0)

答案 3 :(得分:15)

正如你在评论中所阐明的那样,你说了一个例子:WHERE(注意为空)^(ID为空)。我不明白为什么你选择接受这里给出的任何答案来回答这个问题。如果我需要一个xor,我想我必须使用AND / OR等效逻辑:

WHERE (Note is null and ID is not null) OR (Note is not null and ID is null)

这相当于:

WHERE (Note is null) XOR (ID is null)

当'XOR'不可用时。

答案 4 :(得分:4)

xor运算符为^

例如:SELECT A ^ B其中A和B是整数类别数据类型。

答案 5 :(得分:2)

答案 6 :(得分:1)

<>通常是可以应用于布尔值的XOR的良好替代。

答案 7 :(得分:0)

根据您的评论:

  

示例:WHERE(注释为空)^(ID为空)

您可以尝试:

0011->3

答案 8 :(得分:0)

怎么样?

(A=1 OR B=1 OR C=1) 
AND NOT (A=1 AND B=1 AND C=1)

如果A,B和C可以具有空值,则需要以下内容:

(A=1 OR B=1 OR C=1) 
AND NOT ( (A=1 AND A is not null) AND (B=1 AND B is not null) AND (C=1 AND C is not null) )

这可扩展到更多字段,因此更适用。

相关问题