T-SQL XOR运算符

ses*_*011 50 t-sql sql-server xor

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

Nat*_*era 54

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

SELECT 170 ^ 75
Run Code Online (Sandbox Code Playgroud)

结果是225.

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

WHERE 5 > ANY (SELECT foo) AND NOT (5 > ALL (SELECT foo))
Run Code Online (Sandbox Code Playgroud)

  • 我真的没有看到这是如何回答问题,正如他在对这个问题的评论中的例子中所阐明的那样. (7认同)
  • 是的,你正在读它.如果满足一个或多个条件,则XOR为真,但如果满足零个或全部条件,则异或为假.我们可以使用ANY来查看集合中的任何一个或多个值是否满足条件.NOT ... ALL部分确保表达式在满足所有条件时返回false. (3认同)

Alb*_*aro 36

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

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
Run Code Online (Sandbox Code Playgroud)

  • 如果条件很长,这是不合适的. (4认同)

Sha*_*vac 17

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

WHERE (Note is null and ID is not null) OR (Note is not null and ID is null)
Run Code Online (Sandbox Code Playgroud)

这相当于:

WHERE (Note is null) XOR (ID is null)
Run Code Online (Sandbox Code Playgroud)

当'XOR'不可用时.


was*_*was 15

MS SQL只是简短形式(自SQL Server 2012以来):

1=iif( a=b ,1,0)^iif( c=d ,1,0)
Run Code Online (Sandbox Code Playgroud)


Seb*_*ebi 5

异或运算符是^

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