web-dev-qa-db-fra.com

T-SQL XOR Opérateur

Existe-t-il un opérateur XOR ou une fonction équivalente dans SQL Server (T-SQL)?

45
ses011

Il existe un opérateur XOR au niveau des bits - le curseur (^), c’est-à-dire pour:

SELECT 170 ^ 75

Le résultat est 225.

Pour XOR logique, utilisez le mot clé ANY et PAS TOUS, c.-à-d.

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

En utilisant l’algèbre booléenne, il est facile de montrer que:

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

Comme précisé dans votre commentaire Spacemoses, vous avez cité un exemple: WHERE (Note est null) ^ (ID est null). Je ne vois pas pourquoi vous avez choisi d’accepter l’une des réponses données ici. Si j'avais besoin d'un xor pour cela, je pense que je devrais utiliser la logique ET/OU équivalente:

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

Cela équivaut à:

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

lorsque 'XOR' n'est pas disponible.

15
Shawn Kovac

MS SQL uniquement sous forme abrégée (depuis SQL Server 2012):

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

L'opérateur xor est ^

Par exemple: SELECT A ^ B où A et B sont des types de données de catégorie entière.

4
Sebi
2
SQLMenace

<> est généralement un bon remplacement de XOR partout où il peut s'appliquer aux booléens.

1
David Larochette

De votre commentaire:

Exemple: WHERE (Note est null) ^ (ID est null)

vous pourriez probablement essayer:

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