web-dev-qa-db-ja.com

T-SQL XOR演算子

SQL Server(T-SQL)にXOR演算子または同等の関数がありますか?

49
ses011

ビットごとのXOR演算子-キャレット(^)、つまり:

SELECT 170 ^ 75

結果は225です。

論理XORの場合、ANYキーワードとNOT ALLを使用します。

WHERE 5 > ANY (SELECT foo) AND NOT (5 > ALL (SELECT foo))
52
Nathan Rivera

ブール代数を使用すると、次のことを簡単に示すことができます。

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
36
Alberto De Caro

あなたのコメントで明確にされたように、スペースモスは、あなたが例を述べました:WHERE(Note is null)^(ID is 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」が使用できない場合。

17
Shawn Kovac

MS SQLのみの短い形式(SQL Server 2012以降):

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

Xor演算子は^

例えば: SELECT A ^ Bここで、AとBは整数カテゴリデータ型です。

4
Sebi
2
SQLMenace

<>は、通常、XORがブール値に適用できる場所であればどこでも使用できます。

2

あなたのコメントから:

例:WHERE(注はnull)^(IDはnull)

あなたはおそらく試すことができます:

where
   (case when Note is null then 1 else 0 end)
 <>(case when ID is null then 1 else 0 end)
0
Gregor y