При извлечении значения из столбца числа 0 удаляется перед десятичной дробью

#sql #oracle #nls

Вопрос:

В базе данных есть столбец с номером. Когда он извлекается в виде символа с использованием TO_CHAR, цифра перед десятичной точкой теряется.

Select TO_CHAR(column) from table

Например, 0,5 сохраняется в столбце, но при выборе значения возвращается .5

Аналогично, если сохраняется значение -0.5, то возвращается значение-.5 .

Каковы могли быть причины этого ?

Связано ли это с настройкой NLS ?Если да, то какой параметр следует изменить, чтобы получить значение по мере его сохранения .

Комментарии:

1. Начальные нули не хранятся в базе данных. Номера хранятся в соответствии с внутренними форматами. Если вам нужен начальный ноль, то используйте to_char(col, '0.0') .

2. @PTK хранение и отображение-это две разные вещи. Используйте эту dump() функцию, чтобы увидеть, как она на самом деле хранится. Это не '-0.5' .

Ответ №1:

Вы можете сделать что-то вроде этого:

 select to_char(.5,'0.000000')from dual
 

Это не проблема NLS. NLS изменил такие вещи, как десятичный разделитель, разделитель тысяч и т. Д.
Не уверен, сколько десятичных знаков нужно после десятичной точки, так что вы можете это изменить. Я бы также посмотрел на модели числового формата doc

Комментарии:

1. Столбец-это ЧИСЛО, поэтому точность будет разной. Как узнать количество нулей, которые будут добавлены в TO_CHAR после и до десятичной точки

2. Перед десятичной точкой никогда не бывает больше одного нуля.