Номер Oracle - Что не так? - PullRequest
       21

Номер Oracle - Что не так?

2 голосов
/ 26 ноября 2009

Что не так с указанным ниже форматом для to_number?

SELECT TO_NUMBER('0,22', '0,99') * 100 FROM DUAL;

Результат 2200 вместо 22 - что я делаю не так?

Ответы [ 2 ]

13 голосов
/ 26 ноября 2009

Попробуйте:

TO_NUMBER('0,22', '9D99')

В отличие от буквенной запятой, D будет соответствовать только десятичному разделителю. Так что, если это не удастся, ваш десятичный разделитель, вероятно, ., а не ,.

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

select value from nls_session_parameters
where parameter = 'NLS_NUMERIC_CHARACTERS'

Если это возвращает .,, запятая - это ваш разделитель тысяч.

Чтобы изменить разделитель для одного запроса, вы можете:

select TO_NUMBER('0,22','9D99','nls_numeric_characters=,.') from dual;
1 голос
/ 26 ноября 2009

Быстрое предположение: 0,22 против 0,22 (то же самое для 9,99 против 0,99)

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