2014-01-10 7 views
0

У меня возникли проблемы с пониманием того, почему следующие запросы возвращают данные результаты.

Запрос 1:

SELECT TO_NUMBER('$1,000.95', '$999,999.999') 
FROM dual; 

возвращается 1000.95.

Почему этот запрос не возвращается $1000.95 или $1,000.95? Удаляет ли функция TO_NUMBER все форматирование (кроме .)?

Запрос 2:

SELECT TO_NUMBER('1,000.95', '$999,999.999') 
FROM dual; 

возвращается ORA-01722: invalid number.

Я полагаю, что я это понимаю немного лучше - форматная маска не соответствует формату числа. Есть ли способ вернуть $ в число (кроме использования CONCAT или ||)?

ответ

3

Функция TO_NUMBER возвращает число, символ $ ASCII и никогда не будет отображаться в поле чисел. Чтобы добавить символ $, вам нужно будет представить число как строку.

+0

Thanks - very clear. Доступны ли только возможные символы в числах '.' и' -', или есть другие? –

+1

хорошо, что также зависит от того, как количество представлено вам вашей ОС или программным обеспечением и может быть выполнено с помощью настроек локального/валютного/и т.д., оно не хранится так же БД – AnthonyBlake

-1
SELECT TO_NUMBER('$1,000.95', 'L999G999D999') FROM dual; 
+0

http://sqlfiddle.com/# ! 4/cd327/1 – Sai

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