Самое быстрое решение использует стандартные функции (не регулярные выражения).
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