Установите NLSLANG без тысячи разделителей - PullRequest
0 голосов
/ 19 февраля 2019

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

TO_CHAR(15000000.05,'99G990D00', 'NLS_NUMERIC_CHARACTERS = '',''')

выдает ошибку «неверная строка параметра NLS, используемая в функции SQL»

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вы не можете определить разделитель группы. Из документации параметр NLS_NUMERIC_CHARACTERS имеет значение «Любые два допустимых цифровых символа», поэтому вы не можете установить только один из них и оставить другой ноль.(Использование нулевого символа все еще использует два символа и не делает то, что вы хотите, как продемонстрировал @Matthew).

Если вы не хотите использовать разделитель групп в вашей строке, просто опустите его в вашей модели формата:

select to_char(15000000.05, '999999990D00', 'NLS_NUMERIC_CHARACTERS=,.') from dual;

TO_CHAR(15000
-------------
  15000000,05

Я добавил еще 9 секунд в начало модели, так как в вашем оригинале не было достаточно заполнителей для размера значения, поэтому будет иметьвозвращенные хэши вместо чего-либо полезного.

(Ширина столбца - это длина модели формата плюс дополнительный пробел для знака-символа, а строка дополняется слева до этой ширины - чтобы сохранитьвыравнивание нескольких значений. Вы можете потерять отступы, добавив модификатор FM, если хотите.)

0 голосов
/ 19 февраля 2019

Я не думаю, что вы можете использовать NLS_NUMERIC_CHARACTERS для подавления разделителя групп.Вот для чего нужны модели форматов.Если вам не нужны разделители групп, не спрашивайте их в вашей модели формата.Все, что NLS_NUMERIC_CHARACTERS сделает, это определит, каким должен быть разделитель групп, когда он запрашивается.

Даже если вы используете CHR(0), например:

select TO_CHAR(15000000.05,'999G999G990D00', 'NLS_NUMERIC_CHARACTERS = ,' || chr(0))
from dual
15000000,05

Ответ по-прежнему включает в себя chr (0) s (что вы можете увидеть, если обернуть выражение в функцию DUMP()., Например:

select DUMP(TO_CHAR(15000000.05,'999G999G990D00', 'NLS_NUMERIC_CHARACTERS = ,' || chr(0)))
from dual
Typ=1 Len=15: 32,32,49,53,0,48,48,48,0,48,48,48,44,48,53
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...