Использование регулярных выражений в Oracle, чтобы найти значение, игнорирующее все не буквы и цифры - PullRequest
1 голос
/ 12 января 2012

Я пытаюсь написать SQL-запрос, чтобы найти возвращаемые все совпадающие значения в качестве поиска, предполагая, что мы игнорируем все специальные символы. Таким образом, выражение должно «исключать специальные символы», обрабатывая данные так, как если бы все символы A-Z или 0-9 все вместе без пробелов до, после или между любыми символами.

например,

Данные БД

123-FRS% AZ

1.2.3 # frsAZ

123frs AZ

Я хочу ввести поиск для 123frsaz, и он должен вернуть все строки.

1 Ответ

3 голосов
/ 12 января 2012

Это было бы что-то вроде:

select * from thetable
where lower(regexp_replace(thecolumn, '[^[:alnum:]]+', '', 1, 0)) = '123frsaz';

[^[:alnum:]]+ означает любой не буквенно-цифровой символ, один или несколько раз: замените его ничем. Если результат совпадает с введенным вами текстом, у вас есть совпадение.

Демо-версия:

SQL> select * from foo;

BAR
--------------------
123-frs%AZ
1.2.3#frsAZ
123frs AZ
123frsaz but no luck

SQL> select * from foo where lower(regexp_replace(bar, '[^[:alnum:]]+', '', 1, 0)) = '123frsaz';

BAR
--------------------
123-frs%AZ
1.2.3#frsAZ
123frs AZ
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...