Как преобразовать дробную строку в число?

Имеется отрицательная дробная строка, которую я хочу перевести в number при помощи функции TO_NUMBER:

SELECT TO_NUMBER('-45516,51') FROM DUAL;

Однако, при выполнений выдается ошибка:

ORA-01722: invalid number

Каким образом можно конвертировать отрицательные дробные строки в числа?


Ответы (2 шт):

Автор решения: Sanjar Dauletov

Как я выяснил позже, невозможна конвертация если в строке вместо "." используется ",".

Если в документе имеется такая строка, то нужно вначале поменять запятые на точки:

SELECT TO_NUMBER(REPLACE('-45516,51', ',', '.')) FROM test_table;

→ Ссылка
Автор решения: 0xdb

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

show parameter nls_numeric_characters

NAME                   TYPE   VALUE 
---------------------- ------ ----- 
nls_numeric_characters string .,  

select to_number ('-45516,51') num from dual;

ORA-01722: invalid number

В примере из документации показано как явно указать десятичный разделитель и разделитель троек цифр (тысячные разряды):

select to_number ('45516,51', 'FM99999D99' ,'nls_numeric_characters='',.''') num 
from dual;

       NUM
----------
 -45516.51
→ Ссылка