Главная > SQL > Узнать является ли строка числом


Узнать является ли строка числом

Запрос для вывода только числовых значений, используем REGEXP.

При необходимости, оставляем только точку или запятую ‘^-?[[:digit:].]*$‘ или ‘^-?[[:digit:],]*$‘.
Или только целые числа ‘^-?[[:digit:]]*$

with t as (
  select '56456456' str from dual
  union all
  select '4 5' str from dual
  union all
  select 'sds5' str from dual
  union all
  select '-1,5' str from dual  
  union all
  select '-1.5' str from dual  
  )
  select * FROM t 
	where regexp_like(str, '^-?[[:digit:].,]*$');

STR
--------
56456456
-1,5
-1.5

Ну и более простой вариант, который тоже подходит в некоторых случаях:

select case when length(TRIM(TRANSLATE('45', ' 0123456789', ' '))) is null then 'ЧИСЛО'
            else 'СТРОКА'
       end res from dual
union all
select case when length(TRIM(TRANSLATE('a4', ' 0123456789', ' '))) is null then 'ЧИСЛО'
            else 'СТРОКА'
       end res from dual

Вывести строки, которые начинаются на цифру

with t as (
  select '56456456' str from dual
  union all
  select '4 5' str from dual
  union all
  select 'sds5' str from dual
  union all
  select '-1,5' str from dual  
  union all
  select '-1.5' str from dual  
  )
  select * FROM t 
	where regexp_like(str, '^\d');

STR
--------
56456456
4 5

Похожие записи:

  1. alex
    28 Июль 2011 в 21:31 | #1

    если проверить ‘4 5’ то получим что это число, хотя это не число и to_number(‘4 5’) выдаст ошибку ORA-01722: invalid number…

  2. rudev
    29 Июль 2011 в 06:29 | #2

    @alex
    Символ замены, в этом случае, должен быть не пробел, а любой другой символ, который отсутствует в наборе строк. Этот способ, конечно, не универсальный, но во многих случаях может подойти.

  3. Между строк
    23 Август 2011 в 11:58 | #3

    select case when (length(’45’)-length(TRANSLATE(‘4 5’, ‘0123456789’,’~’)))>0
    then ‘СТРОКА’
    else ‘ЧИСЛО’
    end res from dual;

  1. Пока что нет уведомлений.