否定です。しかし、ANSI NULLを理解する必要があります - NULLの否定もNULLです。そして、NULLは偽の真理値です。
したがって、いずれかの引数がnullの場合、@a = @b
の結果はnull(偽)になり、その否定もnull(偽)になります。
ネゲーションを使いたい場合は、NULLを取り除く必要があります。しかし、単に代わりに、比較の結果を逆にする方が簡単かもしれません:常にあなたの1, 0
や0, 1
のいずれかを与える
case when (...) then 1 else 0 end,
case when (...) then 0 else 1 end
を。
EDIT:jpmc26が指摘したように
、あなたが単一NULL
がNULL
すべてのものを作るという考えを取得しないようにヌルがどのように動作するかのビットを拡張すると便利かもしれません。それらの引数のうちの1つがnullの場合、常にnull
を返す演算子はありません。最も明白な例はis null
です。
より広範な例では、T-SQL内の論理演算子はそうのようなOR
式の真理値を定義クリーネの代数(または同様のもの)を、使用することが:
| T | U | F
T | T | T | T
U | T | U | U
F | T | U | F
(AND
が類似している、など
他の引数が不明( "null")でも、少なくとも1つの引数が真であれば、結果も真になることがわかります。 F or U
がU
で、not(U)
がfalsyである、またU
あるので、 - 。またnot(F or U)
はもF or U
がfalsyているにもかかわらず、あなたにfalsy真理値を与える一方でnot(T or U)
は、あなたにfalsy真理値を与えることを意味しています
これは、両方の引数がnullの場合に式が動作する理由を説明するために重要です。@a is null and @b is null
はtrueと評価され、true or unknown
はtrue
と評価されます。
クエリの前に 'set ansi_nulls off;'を置くと、その違いが表示されます。そして、少なくとも一つのオペランドが 'NULL'で' false'である比較から 'NULL'を得ることはありません。 –
@ Luaanの答えは100%正しいです。しかし、 'IS DISTICT FROM'演算子(MySQLでは' <=> ')を探しているかもしれません。 – Owen