2017-02-08 3 views
1

Как найти записи адресов, не содержащие цифры, за которой следует пробел? (например, 15SMith St., в отличие от 15 Smith St)Postgres regex string matching

WHERE a.address not like '.[0-9] .' 

явно не работает для меня.

+1

Как насчет 'WHERE a.address НЕ ПОДХОДИТ К '% [0-9]%''? –

+0

Отлично! Спасибо! –

ответ

2

Вы можете использовать SIMILAR TO с NOT и шаблон, который является «любопытным крестом между обозначениями LIKE и общей регулярной обозначение». Он поддерживает [0-9]:

Выражение скобки [...] определяет класс символов, так же, как и в POSIX регулярных выражений.

Таким образом, вы можете использовать

WHERE a.address NOT SIMILAR TO '%[0-9] %' 

Здесь % матчи любое количество любых символов, [0-9] соответствует ни одной цифры, пробел соответствует пробелу, а затем % снова совпадает с любым количеством любых символов. Эти % необходимы, потому что SIMILAR TO требует полного совпадения строк, как и LIKE.