2013-04-08 17 views
6

etwas Hilfe bei der Umwandlung von Zahlen brauchen:ORACLE konvertieren Nummer String

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 

bewirkt:

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

Aber wie meine Ausgabe machen wie:

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

Ich brauche 0 vor Komma, aber nicht nach.

+1

Sie können '90D99', aber das würde Mache deinen zweiten Wert als "0,4" und nicht als "0,40". Ich bin nicht sicher, dass Sie ein Modell haben können, das sowohl "0,40" als auch "50" erlaubt. –

+0

90D99 gibt mir gleich 0,40. 0,40 war mein Fehler ... ich brauche 0,4 o. – BeHunter

Antwort

10

Verwenden Sie die FM format model modifier, um zu schließen, wie Sie die abschließenden Nullen nach dem Dezimaltrennzeichen nicht erhalten werden; aber Sie werden immer noch den Separator selbst erhalten, z.B. 50.. Sie können rtrim verwenden, dass loszuwerden:

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 

Bitte beachte, dass ich to_char(0, 'D') bin mit dem Charakter zu erzeugen, zu trimmen das Dezimaltrennzeichen passen - so sieht es für den gleichen Charakter, , oder ., wie die erste to_char fügt hinzu.

Der leichte Nachteil ist, dass Sie die Ausrichtung verlieren. Wenn dies an anderer Stelle verwendet wird, es keine Rolle, vielleicht, aber es funktioniert, dann können Sie auch wickeln Sie es in einem lpad, die es ein wenig kompliziert aussehen zu lassen beginnt:

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

vielen dank. es ist was ich brauche. – BeHunter

+0

rtrim (to_char (a, 'FM90D99'), to_char (0, 'D')) ist perfekt danke! – Patrikoko

0

Dies sollte Ihr Problem lösen:

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

Geben Sie auch einen Blick, wie dieser SQL Fiddle für Test.

+0

Es war mein Fehler. Ich brauche 0.4. also können wir trim verwenden ... aber für mee ist es zu komplex ... rtrim (rtrim (to_char (a, '90D99'), '0'), ',') – BeHunter