Как выбрать строки с только числовыми символами в Oracle SQL - PullRequest
0 голосов
/ 08 ноября 2019

Я хотел бы сохранить строки только с числовым символом, т.е. 0-9. Мои исходные данные могут содержать символы любого типа, например 2,%, (.

Input (postcode)
3453gds sdg3
454232
sdg(*d^
452

Expected Output (postcode)
454232
452

. Я пытался использовать WHERE REGEXP_LIKE(postcode, '^[[:digit:]]+$');, однако в моей версии Oracle я получаю сообщение об ошибке

*. 1007 * функция regexp_like (символ меняется, «неизвестно») не существует

Ответы [ 3 ]

0 голосов
/ 08 ноября 2019

Вы хотите regexp_like(), и ваша версия должна работать:

select t.*
from t
where regexp_like(t.postcode, '^[0-9]+$');

Однако ваша ошибка больше похожа на ошибку Postgres, поэтому, возможно, это будет работать:

t.postcode ~ '^[0-9]+$'
0 голосов
/ 08 ноября 2019

В качестве альтернативы ответу Гордона Линоффа мы можем попытаться использовать REGEXP_REPLACE:

SELECT *
FROM yourTable
WHERE REGEXP_REPLACE(postcode, '[0-9]+', '') IS NULL;

Идея состоит в том, чтобы убрать все цифры, а затем утверждать, что ничего не осталось. При смешанном значении цифра-буква замена регулярного выражения приведет к непустой строке.

0 голосов
/ 08 ноября 2019

Для Oracle 10 или выше вы можете использовать regexp функции. В более ранних версиях функция перевода поможет вам:

SELECT  postcode
FROM    table_name
WHERE   length(translate(postcode,'0123456789','1')) is null
AND     postcode IS NOT NULL;

ИЛИ

SELECT translate(postcode, '0123456789' || translate(postcode,'x123456789','x'),'0123456789') nums
   FROM table_name  ;

приведенный выше ответ также работает для меня

SELECT translate('1234bsdfs3@23##PU', '0123456789' || translate('1234bsdfs3@23##PU','x123456789','x'),'0123456789') nums
   FROM dual  ;

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