Почему функция Oracle для char() добавляет пробелы?
почему в Oracle to_char()
функция добавления пробелов?
select length('012'),
length(to_char('012')),
length(to_char('12', '000'))
from dual;
3, 3, 4
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.-
Как вы можете видеть, это будет проблемой, если вы ожидаете два нуля после десятичных знаков (например, в отчетах о сборах).