在SQL Server(T-SQL)中是否存在XOR运算符或等效函数?
有一个按位异或运算符 - 插入符号(^),例如:
SELECT 170 ^ 75
结果为225。
对于逻辑异或,使用ANY关键字和NOT ALL,即:WHERE 5 > ANY (SELECT foo) AND NOT (5 > ALL (SELECT foo))
ANY
逻辑会产生一个“真”的结果。 - Shawn Kovac使用布尔代数,可以很容易地证明:
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
根据您的评论,Spacemoses提供了一个例子:WHERE(Note为null)^(ID为null)。我不明白为什么您选择接受此处给出的任何答案作为回答。如果我需要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”不可用时。
仅适用于 MS SQL 的简称(自 SQL Server 2012 起):
1=iif( a=b ,1,0)^iif( c=d ,1,0)
xor操作符是^
例如:SELECT A ^ B
,其中A和B是整数类型的数据。
WHERE(Note为null)^(ID为null)
这样使用。请注意,这些不是整数XOR操作。 - Shawn Kovac这是关于IT技术的翻译内容:^
是一种运算符,可以在SQL Server中使用。有关更多信息,请参见此处。
此外,在页面中间还有一些代码,可以查看如何使用位非运算符在SQL Server中翻转一个位。
<>
通常是XOR的很好替代,只要它适用于布尔值。
示例:WHERE(Note为空)^(ID为空)
您可以尝试:
where
(case when Note is null then 1 else 0 end)
<>(case when ID is null then 1 else 0 end)