SQL Server(T-SQL)中是否有XOR运算符或等效函数?
答案 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)
^
http://msdn.microsoft.com/en-us/library/ms190277.aspx
另请参阅页面中间的一些代码How to flip a bit in SQL Server by using the Bitwise NOT operator
答案 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) )
这可扩展到更多字段,因此更适用。