Как выбрать только строки, которые содержат целые и десятичные числа в SQL оракула? - PullRequest
0 голосов
/ 21 января 2019

Я хочу выбрать из моей процедуры только целые и десятичные числа. В этом случае 192 и 193,0. Я попробовал regexp_like (columnName, '^ [[: digit:]] * $'), но он выглядит как 192 (целые). Заранее спасибо.

image

Ответы [ 4 ]

0 голосов
/ 21 января 2019

Если вы используете 12.2 или выше, вы можете использовать предложение default <value> on conversion error , чтобы вернуть значение по умолчанию, когда str не может быть преобразовано в число.

например:

select 'abc' str, to_number('abc' default null on conversion error) str_num
from   dual;

str str_num
--- -------
abc

См. это dbfiddle для демонстрации.

0 голосов
/ 21 января 2019

Я бы порекомендовал такую ​​функцию:

CREATE OR REPLACE FUNCTION IsNumeric(Expression IN VARCHAR2) RETURN INTEGER IS
   val NUMBER;
BEGIN
    val := TO_NUMBER(Expression);
    RETURN 1; 
EXCEPTION
    WHEN VALUE_ERROR OR INVALID_NUMBER THEN
        RETURN 0; 
END IsNumeric;
0 голосов
/ 21 января 2019

Попробуйте

regexp_like(columnName, '^[[:digit:]]*(\.[[:digit:]]+)?$')

Это позволяет дополнительной точке, за которой следует хотя бы одна цифра, следовать первой последовательности цифр.

0 голосов
/ 21 января 2019

Как насчет TRANSLATE?

SQL> with test (col) as
  2    (select 'Negativo' from dual union all
  3     select '192'      from dual union all
  4     select '193.3'    from dual union all
  5     select '20.a4'    from dual
  6    )
  7  select col
  8  from test
  9  where translate(col, '0123456789.', 'a') is null;

COL
--------
192
193.3

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