regexp_like, чтобы найти 10 вхождений 0 - PullRequest
0 голосов
/ 25 октября 2019
with smpl as
(
    select '000-000-0000' num from dual union
    select '0000000000' from dual union
    select '00000000000' from dual
)
select * from smpl
where regexp_like(num, '0{10}');

Вывод:

0000000000
00000000000

Как получить записи с 10 вхождениями 0 с необязательным '-' Ожидается:

0000000000
000-000-0000

Ответы [ 3 ]

2 голосов
/ 25 октября 2019

Используйте TRANSLATE для удаления нежелательных символов, а затем LENGTH

with smpl as
(
    select '000-000-0000' num from dual union
    select '0000000000' from dual union
    select '000000000' from dual union
    select '00000000000' from dual
)
select * from smpl
where LENGTH( TRANSLATE( num, '0-', '0' ) ) = 10

или сравните с 0000000000:

with smpl as
(
    select '000-000-0000' num from dual union
    select '0000000000' from dual union
    select '000000000' from dual union
    select '00000000000' from dual
)
select * from smpl
where TRANSLATE( num, '0-', '0' ) = '0000000000'

Выходы :

| NUM          |
| :----------- |
| 000-000-0000 |
| 0000000000   |

дБ <> скрипка здесь

0 голосов
/ 25 октября 2019

Хочу отметить, что вы можете делать это строго с помощью регулярных выражений. Если вы ищете шаблон в любом месте строки:

where regexp_like(num, '(\-*0){10}')

Если вы ищете только этот шаблон в строке:

where regexp_like(num, '^(\-*0){10}\-*$')
0 голосов
/ 25 октября 2019

С помощью regexp это простой способ:

where regexp_count(num, '0') = 10

Однако, если единственным символом, отличным от '0', является '-', я бы предпочел решение без регулярного выражения

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