Вы можете использовать регулярное выражение для удаления последнего символа, только если это ноль:
regexp_replace(to_char(<value>, '9999.999'), '0$', null)
Демо-версия:
with your_table (odds) as (
select 10.50 from dual
union all select 1.53 from dual
union all select 1.004 from dual
union all select 1200.00 from dual
)
select odds, regexp_replace(to_char(odds, '9999.999'), '0$', null) as formatted
from your_table;
ODDS FORMATTED
---------- ---------
10.5 10.50
1.53 1.53
1.004 1.004
1200 1200.00
Вы можете использовать обычные строковые функции, такие как instr
и substr
, но здесь это немного запутанно.
Или вы можете использовать выражение case, чтобы решить, какую модель формата использовать:
to_char(<value>,
case when <value> = trunc(<value>, 2) then '9999.99'
else '9999.999' end)
или
case when <value> = trunc(<value>, 2) then to_char(<value>, '9999.99')
else to_char(<value>, '9999.999') end
или какой-то другой вариант (например, решив включить только 9).
Демо-версия:
with your_table (odds) as (
select 10.50 from dual
union all select 1.53 from dual
union all select 1.004 from dual
union all select 1200.00 from dual
)
select odds,
case when odds = trunc(odds, 2) then to_char(odds, '9999.99')
else to_char(odds, '9999.999')
end as formatted
from your_table;
ODDS FORMATTED
---------- ---------
10.5 10.50
1.53 1.53
1.004 1.004
1200 1200.00