Вы можете использовать конечные нули, когда имеете дело с денежными значениями, например,
Таблица и данные
create table payments (
payment number
) ;
insert into payments( payment )
select 11 from dual union all
select 11.1 from dual union all
select 11.11 from dual ;
Запрос
select payment amount from payments
union
select sum( payment ) from payments ;
-- result
AMOUNT
_________
11
11.1
11.11
33.21
Если вы пишете запрос или представление, которое применяет завершающие нули, вы сможете получить более "полезный" результат, например:
create or replace view payments_view ( position_, description, amount )
as
select
1
, 'item'
, to_char( payment, '999,999.00' )
from payments
union
select
2
, 'total'
, to_char( sum( payment ), '999,999.00' )
from payments
;
select description, amount
from payments_view
order by position_
;
-- output
DESCRIPTION AMOUNT
______________ ______________
item 11.00
item 11.10
item 11.11
total 33.21
DBfiddle здесь .
{ 1} Чем 9990 отличается от 9999? {2} Чем 99,90 отличается от 99,99?
Чтобы сделать это «видимым», взгляните на набор результатов следующего запроса, который показывает различные вызовы функций, DUMP () (возвращает код для типа данных, длину его ввода в байтах и «внутреннее представление» - кодовые точки UTF8 в десятичном виде в данном случае) и фактический вывод. Набор результатов также содержит 3 строки со значениями, дополненными с помощью LPAD () и RPAD () соответственно, чтобы упростить просмотр позиций цифр.
select
'to_char( 1,''9990'' )' function_
, dump( to_char( 1,'9990' ) ) dump_
, to_char( 1, '9990' ) output_
from dual union all
select 'to_char( 1,''9999'' )', dump( to_char( 1, '9999' ) )
, to_char( 1, '9999' )
from dual union all
select 'to_char( 1 )', dump( to_char( 1 ) )
, to_char( 1 )
from dual union all
select 'to_char( 1,''fm9990'' )', dump( to_char( 1,'fm9990' ) )
, to_char( 1, '9999' )
from dual union all
select 'to_char( 1,''fm9999'' )', dump( to_char( 1,'fm9999' ) )
, to_char( 1, '9999' )
from dual union all
select 'to_char( 0,''99.90'' )', dump( to_char( 0,'99.90' ) )
, to_char( 0, '99.90' )
from dual union all
select 'to_char( 0,''99.99'' )', dump( to_char( 0,'99.99' ) )
, to_char( 0, '99.99' )
from dual union all
select 'to_char( 0,''90.99'' )', dump( to_char( 0,'90.99' ) )
, to_char( 0, '90.99' )
from dual union all
select 'to_char( 0,''fm99.90'' )', dump( to_char( 0,'fm99.90' ) )
, to_char( 0, 'fm99.90' )
from dual union all
select 'to_char( 0,''fm99.99'' )', dump( to_char( 0,'fm99.99' ) )
, to_char( 0, 'fm99.99' )
from dual union all
select 'lpad( ''1'', 5, '' '' )', null, lpad( '1', 5, ' ' ) from dual union all
select 'lpad( ''12345'', 6, ''_'' )', null, lpad( '12345', 6, '_' ) from dual union all
select 'rpad( ''12345'', 6, ''_'' )', null, rpad( '12345', 6, '_' ) from dual
;
Результат
FUNCTION_ DUMP_ OUTPUT_
__________________________ _________________________________ __________
to_char( 1,'9990' ) Typ=1 Len=5: 32,32,32,32,49 1
to_char( 1,'9999' ) Typ=1 Len=5: 32,32,32,32,49 1
to_char( 1 ) Typ=1 Len=1: 49 1
to_char( 1,'fm9990' ) Typ=1 Len=1: 49 1
to_char( 1,'fm9999' ) Typ=1 Len=1: 49 1
to_char( 0,'99.90' ) Typ=1 Len=6: 32,32,32,46,48,48 .00
to_char( 0,'99.99' ) Typ=1 Len=6: 32,32,32,46,48,48 .00
to_char( 0,'90.99' ) Typ=1 Len=6: 32,32,48,46,48,48 0.00
to_char( 0,'fm99.90' ) Typ=1 Len=3: 46,48,48 .00
to_char( 0,'fm99.99' ) Typ=1 Len=2: 48,46 0.
lpad( '1', 5, ' ' ) 1
lpad( '12345', 6, '_' ) _12345
rpad( '12345', 6, '_' ) 12345_
Ответы на ваши вопросы:
{1} Без разницы. В обоих случаях результаты заполняются пробелами (1 дополнительный пробел для «знака»). Эффект форматирования сравним с выводом LPAD () (см. Третью строку снизу результирующего набора).
{2} Без разницы.
Как @Ponder Stibbons Как уже упоминалось, будет разница, если число содержит десятичную точку и вы используете модификатор модели формата 'fm' , так как это удалит из вывода посторонние символы.
DBfiddle здесь .