44

ストアド プロシージャ内に次のコードがあります。

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 列のアイテムがあり、他のすべての列は問題ありません。

これの何が悪いのか誰か知っていますか?

4

5 に答える 5

64

WPP.COMMENTが含まれている場合NULL、条件は一致しません。

このクエリ:

SELECT  1
WHERE   NULL NOT LIKE '%test%'

何も返しません。

列では、検索文字列に対してとのNULL両方が。を返します。LIKENOT LIKENULL

あなたの意見では返されるべきであるがそうではない行の関連する値を投稿していただけませんか?

于 2009-10-28T16:55:39.293 に答える
13

これに出くわすだけです。答えは簡単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%'
于 2014-01-31T12:37:35.550 に答える
7

特定のCOMMENT列の値はnullですか?

NOT LIKEは、nullの周囲で適切に動作する方法を知らない場合があります。

于 2009-10-28T16:56:36.483 に答える
6

同じ問題に遭遇して解決しましたが、この投稿を見つける前ではありませんでした。そして、あなたの質問が実際には答えられていないのを見て、これが私の解決策です(うまくいけば、あなた、または私がしたのと同じことを探している他の人のために働くでしょう;

それ以外の;

... AND WPP.COMMENT NOT LIKE '%CORE%' ...

試す;

... AND NOT WPP.COMMENT LIKE '%CORE%' ...

基本的に、私が評価していたフィールドの反対側に「NOT」を移動すると、うまくいきました。

于 2012-04-03T14:24:36.773 に答える
1

mattgcon、

動作するはずですが、「NOT LIKE」行をコメントアウトして同じSQLを実行すると、より多くの行が取得されますか?そうでない場合は、データを確認してください。あなたが質問で言及したことは知っていますが、実際のSQLステートメントがその句を使用していることを確認してください。NULLを使用した他の回答も良い考えです。

于 2009-10-28T16:57:40.727 に答える