Ответ 1
Маска формата, которую вы используете, имеет фиксированную ширину и позволяет использовать знак минус
Почему Oracle to_char()
добавляет пробелы?
select length('012'),
length(to_char('012')),
length(to_char('12', '000'))
from dual;
3, 3, 4
Маска формата, которую вы используете, имеет фиксированную ширину и позволяет использовать знак минус
Дополнительное ведущее пространство для знака минус минус. Чтобы удалить пространство, вы можете использовать FM в формате:
SQL> select to_char(12,'FM000') from dual;
TO_C
----
012
Кстати, обратите внимание, что to_char принимает аргумент NUMBER; to_char ('012') неявно преобразуется в to_char (to_number ('012')) = to_char (12)
Чтобы сделать ответы более ясными:
select '['||to_char(12, '000')||']',
'['||to_char(-12, '000')||']',
'['||to_char(12,'FM000')||']'
from dual
[ 012] [-012] [012]