где предложение — оператор SQL Not Like не работает
спросил
Изменено 9 лет, 3 месяца назад
Просмотрено 216 тысяч раз
У меня есть следующий код в хранимой процедуре.
ГДЕ WPP.ACCEPTED = 1 И WPI.EMAIL LIKE '%@MATH.UCLA.EDU%' И (WPP.SPEAKER = 0 ИЛИ WPP.SPEAKER IS NULL) И WPP.COMMENT НЕ КАК '%CORE%' И WPP.ПРОГРАММНЫЙ КОД = 'cmaws3'
Оператор NOT LIKE не работает, и да, прежде чем кто-либо скажет что-либо, есть элементы со столбцом COMMENT, который не включает CORE, а все остальные столбцы в порядке.
Кто-нибудь знает, что с этим не так?
- sql
- где-пункт
- sql-подобный
Если WPP. COMMENT
содержит
, условие не будет совпадать.
Этот запрос:
ВЫБЕРИТЕ 1 ГДЕ NULL НЕ НРАВИТСЯ '%test%'
ничего не вернет.
В столбце NULL
обе команды LIKE
и NOT LIKE
для любой строки поиска вернут NULL
.
Не могли бы вы опубликовать соответствующие значения строки, которая, по вашему мнению, должна быть возвращена, но это не так?
Только что наткнулся на это, ответ прост, используйте ISNULL
. SQL не будет возвращать строки, если поле, которое вы тестируете, не имеет значения (в некоторых записях) при выполнении поиска сравнения текста, например:
ГДЕ wpp.comment НЕ КАК '%CORE%'
Итак, вы временно заменили значение в нулевых
(пустых) записях с помощью команды ISNULL
, например,
WHERE (ISNULL(wpp.comment,'')) NOT LIKE '%CORE%'
После этого будут показаны все ваши записи, содержащие пустые значения, и будут пропущены те, которые соответствуют вашим критериям соответствия.
Если вы хотите, вы можете поместить что-то в запятые, чтобы помочь вам запомнить, например,WHERE (ISNULL(wpp.comment,'some_records_have_no_value')) NOT LIKE '%CORE%'0
Является ли значение вашего конкретного столбца COMMENT пустым?
Иногда NOT LIKE не знает, как правильно вести себя с нулевыми значениями.
Я только что столкнулся с той же проблемой и решил ее, но не раньше, чем нашел этот пост. И, поскольку на ваш вопрос на самом деле не ответили, вот мое решение (которое, надеюсь, сработает для вас или любого другого, кто ищет то же самое, что и я;
Вместо;
... И WPP.COMMENT НЕ КАК '%CORE%' ...
Попробовать;
... И НЕ WPP.COMMENT LIKE '%CORE%' ...
По сути, перемещение «НЕ» на другую сторону поля, которое я оценивал, сработало для меня.
mattgcon,
Должен работать, вы получаете больше строк, если вы запускаете тот же SQL с закомментированной строкой «НЕ НРАВИТСЯ»? Если нет, проверьте данные. Я знаю, что вы упомянули в своем вопросе, но убедитесь, что фактический оператор SQL использует это предложение. Другие ответы с NULL также являются хорошей идеей.
регулярное выражение — Можем ли мы использовать «НЕ НРАВИТСЯ» в sql
спросил
Изменено 5 лет, 3 месяца назад
Просмотрено 47 тысяч раз
Можем ли мы использовать "НЕ КАК '%abc%'"
прямо напротив LIKE '%abc%'
?
я пробовал и получил некоторый результат, но не выглядит правильно!!
Есть ли что-нибудь похожее на регулярное выражение в SQL
.
Например:
У меня есть таблица с 3 полями.
идентификатор имя адрес 1 xyz 1234 abcd 2 азбуки номанов земли 3 omg #123 нью-йорк 3 номинала $123 &7up
могу ли я получить адрес ** со специальными символами без проверки каждого специального символа один за другим. Как
- sql
- регулярное выражение
- db2
- sql-подобный
Конечно, посмотри сюда. Также НЕ НРАВИТСЯ поддерживается.
2В db2 (версия 9.7.900.250) я успешно указал «не нравится» следующим образом:
выберите * из заказов где нет (orders.order_number как 'S%')
Здесь показаны все заказы, в которых номер заказа НЕ начинается с заглавной буквы «S».
1Не было дано описание того, что было «попробовано и получило какой-то результат, но не выглядит правильным!!» в отношении предметного запроса, но с учетом предоставленных данных и двух предикатов из ОП, учтите следующее; отметив, что на вторичный запрос регулярного выражения , по-видимому, уже ответили и приняли, поэтому он игнорируется в этом ответе:
с xmp (идентификатор, имя, адрес) как ( значения ( 1 , 'xyz' , '1234 abcd' ) , ( 2 , 'abc' , 'земля номанов' ) , (3, 'omg', '#123 Нью-Йорк') , ( 3 , 'nom' , '123$ &7up' ) ) выберите идентификатор из xmp где адрес НЕ НРАВИТСЯ '%abc%'
Приведенный выше запрос DB2 должен дать набор {(2), (3), (3)}; то есть включить все, кроме первой строки.