Почему функция Oracle для char() добавляет пробелы?


почему в Oracle to_char() функция добавления пробелов?

select length('012'), 
       length(to_char('012')), 
       length(to_char('12', '000')) 
  from dual;

3, 3, 4

4 54

4 ответа:

маска формата, которую вы используете, имеет фиксированную ширину и допускает знак минус

дополнительное пространство для потенциального минуса. Для удаления пробела можно использовать FM в формате:

SQL> select to_char(12,'FM000') from dual;

TO_C
----
012

Кстати, обратите внимание, что to_char принимает числовой аргумент; 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]  

имейте в виду, что при использовании синтаксиса " fm " он не будет включать никаких значений после десятичного знака, если не указано с помощью нулей. Например:

SELECT TO_CHAR(12345, 'fm99,999.00') FROM dual                               

возвращает: '12,345.00'

SELECT TO_CHAR(12345, 'fm99,999.99') FROM dual                            

возвращает: ' 12,345.-

Как вы можете видеть, это будет проблемой, если вы ожидаете два нуля после десятичных знаков (например, в отчетах о сборах).