Есть ли в SQL Server (T-SQL) оператор XOR или эквивалентная функция?
Оператор T-SQL XOR
Ответ 1
Существует побитовый оператор XOR - каретка (^), т.е. для:
SELECT 170 ^ 75
Результат - 225.
Для логического XOR используйте ключевое слово ANY и НЕ ВСЕ, т.е.
WHERE 5 > ANY (SELECT foo) AND NOT (5 > ALL (SELECT foo))
Ответ 2
Используя булеву алгебру, нетрудно показать, что:
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
Ответ 3
Как поясняется в вашем комментарии, Spacemoses, вы указали пример: WHERE (примечание равно null) ^ (ID - 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" недоступен.
Ответ 4
MS SQL только короткая форма (начиная с SQL Server 2012):
1=iif( a=b ,1,0)^iif( c=d ,1,0)
Ответ 5
Оператор xor ^
Например: SELECT A ^ B
, где A и B являются целыми категориями типов данных.
Ответ 6
Это ^
http://msdn.microsoft.com/en-us/library/ms190277.aspx
См. также некоторый код здесь, в середине страницы Как перевернуть бит в SQL Server с помощью оператора Bitwise NOT