ストアドプロシージャ内に次のコードがあります。
WHERE
WPP.ACCEPTED = 1 AND
WPI.EMAIL LIKE '%@MATH.UCLA.EDU%' AND
(WPP.SPEAKER = 0 OR
WPP.SPEAKER IS NULL) AND
WPP.COMMENT NOT LIKE '%CORE%' AND
WPP.PROGRAMCODE = 'cmaws3'
NOT LIKEステートメントは機能しません。そして、誰かが何かを言う前に、COREを含まないCOMMENT列を持つアイテムがあり、他のすべての列は問題ありません。
誰がこれの何が悪いのか知っていますか?
WPP.COMMENT
にNULL
が含まれている場合、条件は一致しません。
このクエリ:
SELECT 1
WHERE NULL NOT LIKE '%test%'
何も返しません。
NULL
列では、任意の検索文字列に対してLIKE
とNOT LIKE
の両方がNULL
を返します。
あなたの意見では返されるべきであるがそうではない行の関連する値を投稿してください。
これに出くわすと、答えは簡単です。ISNULL
を使用します。テキスト比較検索を行うときに、テストしているフィールドに(一部のレコードで)値がない場合、SQLは行を返しません。例:
WHERE wpp.comment NOT LIKE '%CORE%'
したがって、null
コマンドを使用して、一時的にISNULL
(空の)レコードの値を置き換えました。たとえば、
WHERE (ISNULL(wpp.comment,'')) NOT LIKE '%CORE%'
これにより、nullを持つすべてのレコードが表示され、一致する基準を持つレコードはすべて除外されます。必要に応じて、覚えやすいようにコンマに何かを入れることができます。例えば
WHERE (ISNULL(wpp.comment,'some_records_have_no_value')) NOT LIKE '%CORE%'
特定のCOMMENT列の値はヌルですか?
NOT LIKEは、nullの周囲で適切に動作する方法を知らない場合があります。
私はちょうど同じ問題に出くわし、それを解決しましたが、この投稿を見つける前ではありませんでした。そして、あなたの質問が本当に答えられなかったのを見て、ここに私の解決策があります(うまくいけば、あなたまたは私と同じことを探している他の人のために働くでしょう;
の代わりに;
... AND WPP.COMMENT NOT LIKE '%CORE%' ...
試してみてください。
... AND NOT WPP.COMMENT LIKE '%CORE%' ...
基本的に、私が評価していたフィールドの反対側に「NOT」を移動することはうまくいきました。
mattgcon、
動作するはずです。「NOT LIKE」行をコメントアウトして同じSQLを実行すると、行が増えますか?そうでない場合は、データを確認してください。あなたの質問であなたが言及したことは知っていますが、実際のSQL文がその句を使用していることを確認してください。 NULLを使用した他の回答もお勧めです。