2013-04-08 22 views
6

Potrzebujesz pomocy w liczbach konwersji:ORACLE konwersji liczby na ciąg

select to_char(a, '99D99') 
     , to_char(a, '90D99') 
from 
(
select 50 a from dual 
union 
select 50.57 from dual 
union 
select 5.57 from dual 
union 
select 0.35 from dual 
union 
select 0.4 from dual 

spowoduje:

1  ,35 0,35 
2  ,40 0,40 
3  5,57 5,57 
4 50,00 50,00 
5 50,57 50,57 

Ale jak uczynić moje wyjście jak:

  1. 0,35
  2. 0,4
  3. 5,57
  4. 50,57

muszę 0 przed przecinkiem, ale nie po.

+1

Można użyć '90D99', ale że wprowadź drugą wartość jako "0,4" zamiast "0,40". Nie jestem pewien, czy możesz mieć jeden model, który dopuszcza zarówno "0,40" i "50". –

+0

90D99 daje mi taką samą 0.40. 0,40 to mój błąd ... potrzebuję 0,4 ofc. – BeHunter

Odpowiedz

10

Korzystanie z FM format model modifier, aby się zamknąć, ponieważ nie otrzymasz końcowych zer po separatorze dziesiętnym; ale nadal otrzymasz sam separator, np. 50.. Można użyć rtrim pozbyć się, że:

select to_char(a, '99D90'), 
    to_char(a, '90D90'), 
    to_char(a, 'FM90D99'), 
    rtrim(to_char(a, 'FM90D99'), to_char(0, 'D')) 
from (
    select 50 a from dual 
    union all select 50.57 from dual 
    union all select 5.57 from dual 
    union all select 0.35 from dual 
    union all select 0.4 from dual 
) 
order by a; 

TO_CHA TO_CHA TO_CHA RTRIM(
------ ------ ------ ------ 
    .35 0.35 0.35 0.35 
    .40 0.40 0.4 0.4 
    5.57 5.57 5.57 5.57 
50.00 50.00 50. 50 
50.57 50.57 50.57 50.57 

Zauważ, że używam to_char(0, 'D') wygenerować znak do przycinania, aby dopasować separator dziesiętny - tak to wygląda w tym samym charakterze, , lub ., jak pierwszy dodaje to_char.

Lekkim minusem jest utrata wyrównania. Jeśli ten jest używany w innym miejscu może nie ma znaczenia, ale to nie to można również owinąć go w lpad, który rozpoczyna się, żeby wyglądało to trochę skomplikowane:

... 
lpad(rtrim(to_char(a, 'FM90D99'), to_char(0, 'D')), 6) 
... 

TO_CHA TO_CHA TO_CHA RTRIM(LPAD(RTRIM(TO_CHAR(A,'FM 
------ ------ ------ ------ ------------------------ 
    .35 0.35 0.35 0.35  0.35 
    .40 0.40 0.4 0.4  0.4 
    5.57 5.57 5.57 5.57  5.57 
50.00 50.00 50. 50   50 
50.57 50.57 50.57 50.57 50.57 
+0

wielkie dzięki. to jest to, czego potrzebuję. – BeHunter

+0

rtrim (to_char (a, 'FM90D99'), to_char (0, 'D')) jest idealne dzięki! – Patrikoko

0

To powinno rozwiązać problem:

select replace(to_char(a, '90D90'),'.00','') 
from 
(
select 50 a from dual 
union 
select 50.57 from dual 
union 
select 5.57 from dual 
union 
select 0.35 from dual 
union 
select 0.4 from dual 
); 

Daj spojrzeć także tym SQL Fiddle dla testu.

+0

To był mój błąd. potrzebuję 0.4. więc możemy użyć wykończenia ... ale jak dla mnie to jest zbyt skomplikowane ... rtrim (rtrim (to_char (a, '90D99'), '0'), ',') – BeHunter

Powiązane problemy