Как отобразить все цифры только в oracle sql? - PullRequest
0 голосов
/ 15 марта 2020

Как отобразить все цифры c только в oracle sql?

Пример:

12345
abcdef
6789
123abc
abc1234
987

Результат:

12345
6789
987

Попробовал это синтаксис, но он не работает:

WHERE ID_No like '%[0-9]%'

Ответы [ 4 ]

3 голосов
/ 15 марта 2020

Один из вариантов - использование функции обратного логарифмирования c - REGEXP_LIKE() с '[^0-9]' паттерном

SELECT *
  FROM t
 WHERE NOT REGEXP_LIKE(ID_No, '[^0-9]') 

или

с [:digit:] posix как [^[:digit:]] шаблон

SELECT *
  FROM t
 WHERE NOT REGEXP_LIKE(ID_No, '[^[:digit:]]')  

Демо

2 голосов
/ 15 марта 2020

Самое быстрое решение использует стандартные функции (не регулярные выражения).

select *
from   t
where  translate(id_no, '~0123456789', '~') is null
;

Обратите внимание на использование дополнительного символа (я использовал ~, но вы могли бы использовать любой другой не-ди git символ) - это необходимо из-за странной спецификации Oracle TRANSLATE, когда третий аргумент null.

translate заменит каждый di git на "ничто" ( это означает, что он удалит их все), заменяя тильду собой и оставляя всех остальных персонажей нетронутыми. Таким образом, возвращаемое значение равно null, только если все символы были цифрами.

Эквивалентное решение:

...
where ltrim(id_no, '0123456789') is null
1 голос
/ 15 марта 2020

Используйте функцию REGEXP_LIKE ():

select * from tablename
where REGEXP_LIKE(ID_No, '^[0-9]+$')
0 голосов
/ 16 марта 2020

Еще один вариант, если вы используете oracle 12.2 или выше, это использовать TO_NUMBER с conversion error следующим образом:

SELECT *
  FROM YOUR_TABLE
 WHERE TO_NUMBER(ID_NO DEFAULT -1 ON CONVERSION ERROR) <> - 1
    OR ID_NO = '-1'

Cheers !!

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