Почему функция Oracle to_char () добавляет пробелы? - PullRequest
54 голосов
/ 27 октября 2008

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

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

3, 3, 4

Ответы [ 4 ]

114 голосов
/ 27 октября 2008

Дополнительное начальное пространство для потенциального знака минус. Для удаления места вы можете использовать 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)

30 голосов
/ 27 октября 2008

Чтобы сделать ответы более понятными:

select '['||to_char(12, '000')||']', 
       '['||to_char(-12, '000')||']', 
       '['||to_char(12,'FM000')||']' 
from dual


[ 012]                      [-012]                       [012]  
25 голосов
/ 27 октября 2008

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

1 голос
/ 16 января 2018

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

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

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

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

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

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

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