2016-07-26 15 views
1

Ich möchte Sie mit Hilfe einer TO_CHAR-Methode in Oracle SQL fragen.Oracle SQL TO_CHAR variabler Länge

TO_CHAR(Number_parameter,'9999D99','NLS_NUMERIC_CHARACTERS = ''. ''') vc_num,

Number_Parameter kommt mit üblichen Werten zwischen 10,10-1.999,99 als Dezimalzahl in (aber nicht auf diese beschränkt) Ich brauche eine VARCHAR mit der kleinsten Darstellung des Wertes mit maximal 2 Dezimalstellen erstellen . Mein Problem ist, dass ich keine Maske gefunden habe, die meine Bedürfnisse befriedigen würde.

Ich brauche 200.99 als '200.99' aber 10.1 als '10.1' während jetzt ' 10.1 ' (mit den weißen Flecken, die ich nicht will) Ich erhalte auch '150' übersetzen 150 sollte und nicht '150.00'

Können Sie mir bitte helfen?

+3

Verwenden Sie den Modifikator 'FM' für Ihre Formatmaske –

Antwort

2

Da @a_horse_with_no_name vorgeschlagen wird, wird die Verwendung des FM format modifier den führenden Leerzeichen entfernen und auch nachfolgende Nullen entfernen. Aber es ist nicht ganz da:

with t(number_parameter) as (
    select 200.99 from dual 
    union all select 10.10 from dual 
    union all select 150.00 from dual 
) 
select to_char(number_parameter,'FM9999D99','NLS_NUMERIC_CHARACTERS = ''. ''') vc_num 
from t; 

VC_NUM 
-------- 
200.99 
10.1  
150. 

Um loszuwerden fo der nachgestellten Punkt Sie trimmen müssen, dass:

with t(number_parameter) as (
    select 200.99 from dual 
    union all select 10.10 from dual 
    union all select 150.00 from dual 
) 
select rtrim(
    to_char(number_parameter,'FM9999D99','NLS_NUMERIC_CHARACTERS = ''. '''), 
    '.') vc_num 
from t; 

VC_NUM 
-------- 
200.99 
10.1  
150 

Oder wie Sie selbst entdeckt, the TM text minimum format model funktioniert auch für Ihre Daten:

with t(number_parameter) as (
    select 200.99 from dual 
    union all select 10.10 from dual 
    union all select 150.00 from dual 
) 
select to_char(number_parameter,'TM') vc_num 
from t; 

VC_NUM               
---------------------------------------------------------------- 
200.99               
10.1                
150