X-оператор T-SQL - PullRequest
       23

X-оператор T-SQL

49 голосов
/ 24 марта 2011

Существует ли оператор XOR или эквивалентная функция в SQL Server (T-SQL)?

Ответы [ 8 ]

52 голосов
/ 24 марта 2011

Существует побитовый оператор XOR - каретка (^), т.е. для:

SELECT 170 ^ 75

Результат 225.

Для логического XOR используйте ЛЮБОЕ ключевое слово, а НЕ ВСЕ, т.е.

WHERE 5 > ANY (SELECT foo) AND NOT (5 > ALL (SELECT foo))
35 голосов
/ 06 февраля 2013

Используя булеву алгебру, легко показать, что:

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
16 голосов
/ 04 апреля 2014

Как поясняется в вашем комментарии, Spacemoses, вы указали пример: ГДЕ (примечание - ноль) ^ (идентификатор - ноль).Я не понимаю, почему вы решили принять любой ответ, приведенный здесь, как ответ на этот вопрос.Если бы для этого мне понадобился 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'недоступен.

15 голосов
/ 19 января 2014

MS SQL только краткая форма (начиная с SQL Server 2012):

1=iif( a=b ,1,0)^iif( c=d ,1,0)
4 голосов
/ 24 марта 2011

Оператор xor: ^

Например: SELECT A ^ B, где A и B - типы данных целочисленной категории.

2 голосов
/ 27 февраля 2019

<> обычно является хорошей заменой XOR везде, где это применимо к логическим значениям.

2 голосов
/ 24 марта 2011
0 голосов
/ 06 октября 2018

Из вашего комментария:

Пример: WHERE (примечание - ноль) ^ (идентификатор - ноль)

Вы, вероятно, можете попробовать:

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