Existe-t-il un opérateur XOR ou une fonction équivalente dans SQL Server (T-SQL)?
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))
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
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.
MS SQL uniquement sous forme abrégée (depuis SQL Server 2012):
1=iif( a=b ,1,0)^iif( c=d ,1,0)
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.
C’est ^
http://msdn.Microsoft.com/en-us/library/ms190277.aspx
Voir aussi du code ici au milieu de la page Comment retourner un bit dans SQL Server à l’aide de l’opérateur Bitwise NOT
<>
est généralement un bon remplacement de XOR partout où il peut s'appliquer aux booléens.
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)