Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So formatieren Sie Zahlen in Oracle

In Oracle Database können Sie Zahlen auf viele Arten formatieren.

Beispielsweise können Sie eine Zahl als Währung formatieren, mit Kommas und Dezimalpunkten an der richtigen Stelle. Sie können führende Nullen angeben, Sie können einen Bruchteil hinzufügen – oder ihn entfernen, wenn dies erforderlich ist.

Dieser Artikel enthält Beispiele für Folgendes:

  • Zahlen als Währung formatieren
  • Fügen Sie ein Komma/Tausendertrennzeichen hinzu
  • Nachkommastellen einbeziehen
  • Alle Dezimalstellen entfernen
  • Fügen Sie führende Nullen zu einer Zahl hinzu

Ich erkläre auch, wie die Formatierung von den NLS-Parametern Ihrer Sitzung beeinflusst wird.

NLS-Initialisierungsparameter bestimmen, welche Zeichen für das Gruppentrennzeichen, das Dezimalzeichen und das Währungssymbol in der aktuellen Sitzung verwendet werden. Sie können diese Parameter nutzen, um eine gebietsschemaabhängige Formatierung auszugeben.

Sie können Funktionen wie TO_CHAR(number) verwenden und sogar LPAD() um Zahlen in eine Zeichenfolge umzuwandeln und sie im Handumdrehen genau so zu formatieren, wie Sie es möchten. Funktionen wie CAST() kann sich auch auf die Formatierung einer Zahl auswirken, je nach Datentyp, in den sie umgewandelt wird.

Ein kurzes Beispiel

Hier ist ein kurzes Beispiel für die Formatierung einer Zahl mit TO_CHAR() Funktion:

SELECT 
    TO_CHAR(12345, 'fmL99G999D00')
FROM DUAL;

Ergebnis:

$12,345.00

Der fmL99G999D00 part ist ein Formatmodell, das festlegt, wie die Ausgabe formatiert werden soll. Sie können das Formatmodell Ihren Anforderungen entsprechend ändern.

Jedes Zeichen im Formatmodell ist ein Formatelement und hat eine besondere Bedeutung. Sie können Formatelemente nach Bedarf hinzufügen oder entfernen.

Hier ist eine vollständige Liste der Formatelemente, die Sie für Ihr Formatmodell beim Formatieren von Zahlen verwenden können.

Es stimmt zwar, dass Sie für verschiedene Formatelemente (z. B. ein Dollarzeichen ($ ) für Dollar), setzt dies voraus, dass die Währung auf diesen hartcodierten Wert lautet. Es gibt viele andere mögliche Währungen auf der ganzen Welt, und die Formatelemente können das lokale Währungssymbol für die Sitzung des Benutzers dynamisch zurückgeben.

Das Gleiche gilt für das Gruppentrennzeichen und das Dezimalzeichen. Unterschiedliche Gebietsschemas verwenden unterschiedliche Konventionen. Die Verwendung dieser länderspezifischen Formatelemente macht Ihren Code portabler.

Auch das TO_CHAR() Mit der Funktion können Sie Ihre eigenen NLS-Parameter innerhalb der Funktion übergeben. Dies wirkt sich nur auf diesen Funktionsaufruf aus, sodass Sie Dinge wie Währungssymbole im Handumdrehen ändern können, ohne sie in Ihr Formatmodell fest codieren oder die NLS-Parameter für Ihre Sitzung aktualisieren zu müssen.

Die folgenden Beispiele zeigen detaillierter, wie jedes Formatelement funktioniert.

Zahlen als Währung formatieren

Hier ist ein Beispiel für die Formatierung einer Zahl als Währung:

SELECT 
    TO_CHAR(12, 'fmL99')
FROM DUAL;

Ergebnis:

$12

In diesem Fall habe ich das L verwendet format-Element, um das lokale Währungssymbol anzugeben. Das lokale Währungssymbol wird durch NLS_CURRENCY bestimmt Parameter.

Alternativ können Sie auch den C verwenden oder U Formatelemente, die das ISO-Währungssymbol bzw. das doppelte Währungssymbol zurückgeben.

Weitere Informationen und Beispiele finden Sie unter So formatieren Sie Zahlen als Währung in Oracle.

Fügen Sie ein Komma/Tausender-Trennzeichen hinzu

Sie können zwar immer ein fest codiertes Komma für Ihr Tausender-/Gruppentrennzeichen verwenden, dies berücksichtigt jedoch nicht Länder, die einen Punkt als Gruppentrennzeichen verwenden. Das Gegenteil ist offensichtlich wahr. Außerdem trennen einige Länder Tausende von Gruppen mit einem dünnen Raum.

Sie können das G verwenden format-Element, um ein Gruppentrennzeichen anzugeben. Dies gibt dynamisch das anwendbare Gruppentrennzeichen zurück, wie in NLS_NUMERIC_CHARACTERS angegeben Parameter. Dieser Parameter bestimmt sowohl das Gruppentrennzeichen als auch das Dezimalzeichen.

Beispiel:

SELECT 
    TO_CHAR(12345, 'fm99G999')
FROM DUAL;

Ergebnis:

12,345

Hier ist ein weiteres Beispiel mit einer größeren Zahl:

SELECT 
    TO_CHAR(123456789, 'fm999G999G999')
FROM DUAL;

Ergebnis:

123,456,789

Siehe How to Format a Number with a Comma in Oracle für eine ausführlichere Diskussion.

Dezimalstellen einbeziehen

Es stimmt zwar, dass Sie Ihr eigenes Radix-Zeichen (z. B. einen Punkt) in Ihr Formatmodell fest codieren können, dies wird jedoch nicht für andere Gebietsschemata berücksichtigt, die ein anderes Zeichen verwenden.

Sie können das D verwenden format-Element, um das Dezimal-/Basiszeichen zurückzugeben, das in NLS_NUMERIC_CHARACTERS angegeben ist Parameter für die aktuelle Sitzung:

SELECT 
    TO_CHAR(7, 'fm9D00')
FROM DUAL;

Ergebnis:

 7.00

In diesem Fall habe ich zwei 0 verwendet Formatelemente nach dem Basiszeichen. Dieses Formatelement gibt gegebenenfalls nachgestellte Nullen zurück.

Mit einem 9 würde in diesem Fall alle nachgestellten Nullen unterdrücken:

SELECT 
    TO_CHAR(7, 'fm9D99')
FROM DUAL;

Ergebnis:

7.

Wenn wir jedoch den fm format modifier erhalten wir ein anderes Ergebnis:

SELECT 
    TO_CHAR(7, '9D99')
FROM DUAL;

Ergebnis:

 7.00

Der fm Der Formatmodifikator unterdrückt jegliches Padding, das auf das Ergebnis angewendet wurde. Durch das Entfernen wird unser Ergebnis aufgefüllt. Es enthält ein führendes Leerzeichen, weil hier ein negatives Vorzeichen stehen würde, wenn die Zahl negativ gewesen wäre. Und es enthält auch nachgestellte Nullen, weil wir zwei 9 angegeben haben Formatelemente.

Weitere Ideen zum Formatieren von Zahlen mit Dezimalstellen finden Sie unter 3 Möglichkeiten zum Formatieren einer Zahl mit 2 Dezimalstellen in Oracle.

Alle Dezimalstellen entfernen

Es gibt mehrere Möglichkeiten, eine Zahl ohne Dezimalstellen zu formatieren. Eine naheliegende Möglichkeit besteht darin, einfach den Dezimalteil aus unserem Format-String zu entfernen:

SELECT 
    TO_CHAR(7, 'fm9')
FROM DUAL;

Ergebnis:

   7

Wir können aber auch andere Funktionen verwenden, wie zum Beispiel ROUND() , TRUNC() , und CAST() um den gleichen oder einen ähnlichen Effekt zu erzielen.

Beispiele finden Sie unter 4 Möglichkeiten zum Formatieren einer Zahl ohne Dezimalstellen in Oracle.

Füge führende Nullen hinzu

Wir haben ein paar Optionen, wenn es darum geht, führende Nullen zu unserer Nummer hinzuzufügen.

Bleiben Sie wieder beim TO_CHAR() Funktion können wir die 0 verwenden format-Element, um führende und nachgestellte Nullen zurückzugeben.

SELECT 
    TO_CHAR(7, 'fm000')
FROM DUAL;

Ergebnis:

007

Wenn wir den 9 verwendet hätten format-Element hätten wir keine führenden Nullen:

SELECT 
    TO_CHAR(7, 'fm999')
FROM DUAL;

Ergebnis:

   7

Wenn wir jedoch den fm Formatmodifikator, hätten wir ein Leerzeichen bekommen, wo jede führende Null gewesen wäre:

SELECT 
    TO_CHAR(7, '999')
FROM DUAL;

Ergebnis:

   7

Eine andere Möglichkeit, eine Zahl mit führenden Nullen zu formatieren, ist mit LPAD() Funktion. Diese Funktion wendet linkes Padding auf eine Zeichenfolge oder Zahl an. Sie können angeben, welche Zeichen zum Auffüllen verwendet werden sollen. Wenn Sie also eine Null verwenden, wird diese mit Nullen aufgefüllt.

Ein Beispiel finden Sie unter 2 Möglichkeiten zum Formatieren einer Zahl mit führenden Nullen in Oracle.

Überprüfen der NLS-Parameter

Die NLS-Parameter (National Language Support) bestimmen das gebietsschemaspezifische Verhalten sowohl auf dem Client als auch auf dem Server. Dazu gehören Parameter, die bestimmen, welche Zeichen für Gruppentrennzeichen, Dezimalzeichen, Währungssymbole usw. verwendet werden sollen.

Lassen Sie uns den aktuellen Wert meiner NLS-Parameter überprüfen:

SELECT 
    PARAMETER,
    VALUE
FROM V$NLS_PARAMETERS;

Ergebnis:

                 PARAMETER                             VALUE 
__________________________ _________________________________ 
NLS_LANGUAGE               ENGLISH                           
NLS_TERRITORY              AUSTRALIA                         
NLS_CURRENCY               $                                 
NLS_ISO_CURRENCY           AUSTRALIA                         
NLS_NUMERIC_CHARACTERS     .,                                
NLS_CALENDAR               GREGORIAN                         
NLS_DATE_FORMAT            DD/MON/RR                         
NLS_DATE_LANGUAGE          ENGLISH                           
NLS_CHARACTERSET           AL32UTF8                          
NLS_SORT                   BINARY                            
NLS_TIME_FORMAT            HH12:MI:SSXFF AM                  
NLS_TIMESTAMP_FORMAT       DD/MON/RR HH12:MI:SSXFF AM        
NLS_TIME_TZ_FORMAT         HH12:MI:SSXFF AM TZR              
NLS_TIMESTAMP_TZ_FORMAT    DD/MON/RR HH12:MI:SSXFF AM TZR    
NLS_DUAL_CURRENCY          $                                 
NLS_NCHAR_CHARACTERSET     AL16UTF16                         
NLS_COMP                   BINARY                            
NLS_LENGTH_SEMANTICS       BYTE                              
NLS_NCHAR_CONV_EXCP        FALSE                            

Die folgenden Parameter bestimmen Formatierungselemente für Zahlen und Währungen:

  • NLS_CURRENCY
  • NLS_ISO_CURRENCY
  • NLS_NUMERIC_CHARACTERS
  • NLS_DUAL_CURRENCY

Der Standardwert dieser Parameter wird durch NLS_TERRITORY bestimmt Parameter. Wenn wir den Wert von NLS_TERRITORY festlegen -Parameter, setzt dies implizit den Wert für verschiedene andere Parameter (einschließlich der vier erwähnten).

In meinem Fall ist mein Gebiet Australien, und daher spiegeln diese vier Parameter wider, wie Zahlen in Australien normalerweise formatiert werden. Wenn ich es in Deutschland ändern würde, würden diese vier Parameter aktualisiert, um die Formatierung für Deutschland widerzuspiegeln.

Sie können jedoch jeden Parameter explizit einzeln festlegen. Dadurch können Sie den Wert überschreiben, der implizit durch NLS_TERRITORY festgelegt wurde Parameter.