Можем ли мы использовать "НЕ НРАВИТСЯ" в SQL - PullRequest
10 голосов
/ 16 февраля 2012

Можем ли мы использовать "NOT LIKE '%abc%'" прямо напротив LIKE '%abc%'? Я пытался и получил какой-то результат, но не похоже на правильный !!

Есть ли что-нибудь похожее на regex in SQL.

Например:

у меня есть таблица с 3 полями.

id  name  address
1    xyz    1234 abcd 
2    abc    nomans land
3    omg    #123 new-york
3    nom    $123 &7up

могу ли я получить адрес ** со специальными символами, не проверяя каждый специальный символ один за другим. Как

Ответы [ 4 ]

6 голосов
/ 16 февраля 2012

В SQL Server. если вам нужны адреса, содержащие символы, отличные от буквенно-цифровых символов и пробелов:

address LIKE '%[^0-9a-zA-Z ]%';

отметка символа ^ означает «любой отдельный символ, не входящий в указанный диапазон». Не уверен, что в DB2 возможно что-то очень похожее.

5 голосов
/ 16 февраля 2012

Конечно, смотрите здесь .Также поддерживается NOT LIKE.

3 голосов
/ 02 августа 2016

В db2 (версия 9.7.900.250) я успешно указал "не нравится" следующим образом:

select * from orders
where not(orders.order_number like 'S%')

Здесь показаны все ордера, в которых ордер # НЕ начинается с заглавной буквы "S".

2 голосов
/ 02 августа 2016

Не было дано никакого описания того, что "попробовали и получили какой-то результат, но выглядят неправильно!"в отношении предметного запроса, но при рассмотрении приведенных данных и двух предикатов из ФП рассмотрите следующее;отмечая, что дополнительный запрос regex , по-видимому, уже получен и принят, поэтому он игнорируется в этом ответе:

with
  xmp (id, name, address) as
( values ( 1  ,  'xyz'  ,  '1234 abcd '    )
       , ( 2  ,  'abc'  ,  'nomans land'   )
       , ( 3  ,  'omg'  ,  '#123 new-york' )
       , ( 3  ,  'nom'  ,  '$123 &7up'     )
)
select id
from xmp
where address NOT LIKE '%abc%'

Приведенный выше запрос DB2 должен привести к набору {(2), (3), (3)};т.е. включить все кроме первого ряда.Изменение предиката с address NOT LIKE '%abc%' на address LIKE '%abc%' должно привести к набору {(1)};т.е. включить только первый ряд.Спецификация предиката в форме address NOT LIKE '%abc%' или NOT (address LIKE '%abc%') должна давать тот же результат;это логически идентичные запросы.

...