2016-10-25 5 views
1

У меня есть номера, сохраненные в таблице в качестве строки, напримерНевозможно записать to_number

25758313,1 
200000000 
1418213,04 

Я знаю, что нет 1) всегда не разделитель групп; 2) запятая в качестве десятичного разделителя, если это необходимо; 3) не более двух десятичных символов.

Triyng для создания представления со столбцами, определенными как to_number (string_val), но может писать правильное выражение.

+0

Это еще один хороший пример, почему вы должны ** ** никогда не хранить числа в 'varchar' столбцов. –

+0

@a_horse_with_no_name К несчастью, я не могу решить, как хранить данные. По крайней мере сейчас. – hinotf

+0

Попробуйте что-то вроде 'SELECT TO_NUMBER (col, '999999999D9999', 'NLS_NUMERIC_CHARACTERS =' ',' '') FROM table'. Примечание. Третьи параметры используют две одинарные кавычки (или даже три в конце), и после запятой есть пробел. – Codo

ответ

2

The manual page for TO_NUMBER() есть пример можно адаптировать:

аргумент в этой функции имеет ту же цель, как это делает в TO_CHAR функции для преобразования чисел.

SELECT TO_NUMBER('-AusDollars100','L9G999D99', 
    ' NLS_NUMERIC_CHARACTERS = '',.'' 
    NLS_CURRENCY   = ''AusDollars'' 
    ') "Amount" 
    FROM DUAL; 

Это может быть что-то вроде:

WITH data AS (
    SELECT '25758313,1' AS original_text FROM DUAL 
    UNION ALL SELECT '200000000' FROM DUAL 
    UNION ALL SELECT '1418213,04' FROM DUAL 
) 
SELECT original_text, 
TO_NUMBER(original_text, '999999999999D999999999999', 'NLS_NUMERIC_CHARACTERS = '',.''') AS parsed_number 
FROM data; 
ORIGINAL_T PARSED_NUMBER 
---------- ------------- 
25758313,1 25758313.1 
200000000  200000000 
1418213,04 1418213.04 
+0

Спасибо. Я стараюсь несколько сочетаний маски и NLS_NUMERIC_CHARACTERS, но этот работает! – hinotf

Смежные вопросы