私は、10レコードに「TAX」という単語を含むテキストがある200レコードのテーブルを持っています。反対の結果を返さないLIKEとLIKE逆の結果を返さない
私は
Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'
を実行していますし、私は正しく、これらの10件のレコードを含む結果セットを取得します。
しかし、ときに私はこれを行う代わりに、190
私は、10レコードに「TAX」という単語を含むテキストがある200レコードのテーブルを持っています。反対の結果を返さないLIKEとLIKE逆の結果を返さない
私は
Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'
を実行していますし、私は正しく、これらの10件のレコードを含む結果セットを取得します。
しかし、ときに私はこれを行う代わりに、190
の、唯一の100件のレコードを返すだ
Select * from tbl1 WHERE [TextCol] NOT LIKE '%TAX%'
によってそれらのレコードを除外しようとしています正しい結果を返しますか?
Select * from tbl1 WHERE COALESCE([TextCol],'-1') NOT LIKE '%TAX%'
私は列がそれらが含まれている場合は、その後、NULL NOT LIKE '%TAX%'
はUNKNOWN/NULL
を返しますので、選択されることはありません、NULL
値はここに問題があると考えています。
handling with NULL
valuesまたはhereについてお読みください。パフォーマンスが問題になる場合
@ughaiが示唆したように、あなたも使用することができます。
[TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL
これは、null値の世話をする必要があります。
Select * from tbl1
WHERE [TextCol] NOT LIKE '%TAX%'
OR [TextCol] IS NULL
Select * from tbl1
WHERE ([TextCol] NOT LIKE '%TAX%') AND ([TextCol] NOT LIKE '%TAX%')
select * from tbl1
where [TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL
WHERE([TextCol] NOT LIKE '%TAX%')と([TextCol] NOT LIKE '%TAX%')のポイントは何ですか? – moopet
このコードスニペットは、あなたの投稿の質を向上させるための説明(本当に助けます)(// meta.stackexchange.com/q/114762)を含め、質問を解決するかもしれません。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –
はあなたにもNULL値をチェックする必要があります同様に、出力のすべての行が得られなかったのはおそらく理由です。
このコードスニペットは、あなたの投稿の質を向上させるための説明(本当に助けます)(// meta.stackexchange.com/q/114762)を含む質問を解決するかもしれませんが。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –
(A) SQL比較演算子は、True、False、Unknownの3つの値をとります。一方または両方のオペランドがNULL
の場合、結果は不明です。我々は(18)の定数でいくつかの値(人の年齢)を比較以下の例を考えてみます
21 >= 18 -- True
15 >= 18 -- False
NULL >= 18 -- Unknown
をあなたが見ることができるようにNULL
が18に等しい/より大きい場合、データベースは/決められないだろうことができます。
(B)データベースは、WHERE
句がTrueと評価される行のみを返します。式を反転すると(例:WHERE age >= 18
はWHERE age < 18
に変更されました)、不明な結果には影響しません。
IS [NOT] NULL
を使用して、NULL
の値と一致させることができます。次のクエリは、列がパターンに一致しない行を選択しますまたは列がNULLである:そのようISNULL
とCOALESCE
として
WHERE [TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL
機能がいくつかの値にNULL
を変換するために使用することができます。
修正:NULL値を含むすべての操作は** UNKNOWNとなります** **。 'SELECT COUNT(TextCol)as tally FROM tbl1' – onedaywhen
編集 'すべての操作' - > '比較演算子'は良い+1 – onedaywhen
それは私にも一度も起こります!私の頭を壊した後、ヌル値であることがわかったので、このクエリを使用して回避することができます:
WHERE CASE WHEN [TextCol] IS NULL
THEN 'default'
ELSE [TextCol]
END NOT LIKE '%TAX%'
その列には「ヌル」値がありますか? – musefan
はい、その列にヌル値があります – Shanka
可能であれば、検索文字列の先頭に '%'を使用しないようにしてください。それはかなり重いです。 –