Подтвердить что ты не робот

SQL-сообщение не работает

У меня есть следующий код в хранимой процедуре.

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 не работает, и да, прежде чем кто-либо скажет что-нибудь, есть элементы с столбцом COMMENT, который не включает CORE, а все остальные столбцы в порядке.

Кто-нибудь знает, что с этим не так?

4b9b3361

Ответ 1

Если WPP.COMMENT содержит NULL, условие не будет соответствовать.

Этот запрос:

SELECT  1
WHERE   NULL NOT LIKE '%test%'

ничего не вернет.

В столбце NULL оба LIKE и NOT LIKE для любой строки поиска вернут NULL.

Не могли бы вы разместить соответствующие значения строки, которая, на ваш взгляд, должна быть возвращена, но это не так?

Ответ 2

Является ли значение вашего конкретного столбца COMMENT нулевым?

Иногда NOT LIKE не знает, как правильно вести себя вокруг нулей.

Ответ 3

Я просто наткнулся на ту же проблему и решил ее, но не раньше, чем нашел этот пост. И, видя, что на ваш вопрос не ответил, вот мое решение (которое, надеюсь, будет работать для вас или любого другого, кто ищет то же самое, что и я,

Вместо <

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

Попробуйте

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

В основном перемещение "NOT" на другую сторону поля, которое я оценивал, работало для меня.

Ответ 4

Просто напомните это, ответ прост, используйте ISNULL. SQL не будет возвращать строки, если тестируемое поле не имеет значения (в некоторых из записей) при выполнении поиска текстового сравнения, например:

WHERE wpp.comment NOT LIKE '%CORE%'

Итак, вы временно подставляете значение в записи null (empty) с помощью команды ISNULL, например

WHERE (ISNULL(wpp.comment,'')) NOT LIKE '%CORE%'

Затем будут показаны все ваши записи с нулевыми значениями и опускаются те, которые соответствуют вашим критериям. Если бы вы хотели, вы могли бы поместить что-то в запятую, чтобы помочь вам запомнить, например

WHERE (ISNULL(wpp.comment,'some_records_have_no_value')) NOT LIKE '%CORE%'

Ответ 5

mattgcon,

Должен ли работать, вы получаете больше строк, если вы запустили тот же SQL с отключенной линией "NOT LIKE"? Если нет, проверьте данные. Я знаю, что вы упомянули в своем вопросе, но убедитесь, что фактический оператор SQL использует это предложение. Другие ответы с NULL также являются хорошей идеей.