Почему этот regexp_like не дает желаемых результатов? - PullRequest
0 голосов
/ 27 июня 2018

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

with xx as
  (select '333-22-234223' as a
   from dual)
select xx.a
from xx
where
  regexp_like(xx.a,'^[:digit:]{3}-[:digit:]{2}-[:digit:]{6}$');

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Альтернатива @Sebastion Brosch

Вы можете заменить класс символов ([:digit:]) на явный диапазон цифр, например:

with xx as
(select '333-22-234223' as a
from dual)
select xx.a
from xx
where
regexp_like(xx.a,'^[0-9]{3}-[0-9]{2}-[0-9]{6}$');
0 голосов
/ 10 июля 2018

Для полноты вы можете использовать \d для цифры:

with xx as
  (select '333-22-234223' as a
   from dual)
select xx.a
from xx
where regexp_like(xx.a,'^\d{3}-\d{2}-\d{6}$');
0 голосов
/ 27 июня 2018

Вы можете использовать следующее решение, используя [[:digit:]] (double [...]):

WITH xx AS (
    SELECT '333-22-234223' AS a FROM dual
)
SELECT xx.a
FROM xx
WHERE REGEXP_LIKE(xx.a, '^[[:digit:]]{3}-[[:digit:]]{2}\-[[:digit:]]{6}$');

... или использование [0-9] вместо [[:digit:]]:

WITH xx AS (
    SELECT '333-22-234223' AS a FROM dual
)
SELECT xx.a
FROM xx
WHERE REGEXP_LIKE(xx.a, '^[0-9]{3}-[0-9]{2}\-[0-9]{6}$');

демо: http://sqlfiddle.com/#!4/3149e4/120/1


Зачем нужны двойные скобки?

Эти классы символов действительны только внутри выражения в скобках.
источник: https://docs.oracle.com/cd/B12037_01/server.101/b10759/ap_posix001.htm

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