2013-04-08 24 views
6

bisogno di aiuto nei numeri di conversione:ORACLE convertire il numero a stringa

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 

si tradurrà in:

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

Ma come fare il mio output come:

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

Ho bisogno 0 prima virgola, ma non dopo.

+1

È possibile utilizzare '90D99', ma che avrebbe fai il tuo secondo valore come '0,4' piuttosto che' 0,40'. Non sono sicuro che tu possa avere un modello che permetta sia '0,40' che' 50'. –

+0

90D99 restituisce lo stesso 0.40. 0,40 è stato il mio errore ... ho bisogno di 0,4 ofc. – BeHunter

risposta

10

Utilizzare il FM format model modifier per avvicinarsi, poiché non si otterranno gli zeri finali dopo il separatore decimale; ma otterrai comunque il separatore stesso, ad es. 50.. È possibile utilizzare rtrim per sbarazzarsi di che:

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 

Nota che sto usando to_char(0, 'D') per generare il carattere di tagliare, per abbinare il separatore decimale - così sembra per lo stesso carattere, , o ., come il primo to_char aggiunge.

Il leggero svantaggio è che si perde l'allineamento. Se questo viene utilizzato altrove potrebbe non importa, ma lo fa, allora si può anche avvolgere in un lpad, che inizia a farlo sembrare un po 'complicato:

... 
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

grazie mille. è ciò di cui ho bisogno. – BeHunter

+0

rtrim (to_char (a, 'FM90D99'), to_char (0, 'D')) è perfetto grazie! – Patrikoko

0

Questo dovrebbe risolvere il problema:

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 
); 

dare un aspetto anche questo SQL Fiddle per la prova.

+0

È stato un mio errore. ho bisogno di 0.4. quindi possiamo usare trim ... ma per me è troppo complesso ... rtrim (rtrim (to_char (a, '90D99'), '0'), ',') – BeHunter

Problemi correlati