Простое регулярное выражение в Oracle - PullRequest
2 голосов
/ 16 октября 2010

У меня есть таблица со следующими значениями:

ID     NAME        ADDRESS
1      Bob         Super stree1 here goes
2      Alice       stree100 here goes
3      Clark       Fast left stree1005
4      Magie       Right stree1580 here goes

Мне нужно сделать запрос, используя LIKE, и получить только строку, имеющую stree1 (в этом случае получить только строку с ID = 1), и я использую следующий запрос:

select * from table t1 WHERE t1.ADDRESS LIKE '%stree1%';

Но проблема в том, что я получаю все строки, так как каждая из них содержит stree1 плюс некоторое число / число после.

Я обнаружил, что могу использовать REGEXP_LIKE, поскольку я использую оракул, что было бы правильным регулярным выражением для:

select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1');

Ответы [ 3 ]

4 голосов
/ 16 октября 2010

Я думаю, что это будет искомый иск:

select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1(?:[^[:word:]]|$)');

Если вы хотите, вы можете еще больше упростить это до:

select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1(?:\W|$)');

То естьЗа 'stree1' не следует символ слова (т. е. за ним следует пробел / пунктуация / и т. д.), или в конце строки появляется 'stree1'.Конечно, есть много других способов сделать то же самое, в том числе границы слова 'stree1 \ b', ожидание определенных символов после 1 в stree1 (например, пробел с 'stree1 \ s') и т. Д ...

0 голосов
/ 25 декабря 2012

Первый '\ W' говорит о том, что это не символ слова, так как вам нужно отметить после 'stree1', но пробел и '$' говорит, что нужно считать ее допустимой строкой, если она заканчивается на stree1

select *
from table1
where regexp_like(address,'stree1(\W|$)')
0 голосов
/ 16 октября 2010

Это может помочь:

stree1\b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...