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

TO_CHAR(Zahl) Funktion in Oracle

In der Oracle-Datenbank der TO_CHAR(number) Funktion konvertiert eine Zahl in einen VARCHAR2 Wert in dem durch das Formatargument angegebenen Format.

Syntax

Die Syntax lautet wie folgt:

TO_CHAR(n [, fmt [, 'nlsparam' ] ])

Wo:

  • n kann vom Typ NUMBER sein , BINARY_FLOAT , oder BINARY_DOUBLE .
  • fmt ist ein optionales Formatmodell, das angibt, wie das Ergebnis formatiert werden soll. Sehen Sie sich die gültigen Zahlenformatelemente an, die zum Erstellen Ihres Formatmodells verwendet werden können.
  • 'nlsparam' ist ein optionales Argument, das angibt, wie verschiedene Zeichen zurückgegeben werden. Sie können es verwenden, um das Dezimalzeichen und das Gruppentrennzeichen, das lokale Währungssymbol und das internationale Währungssymbol anzugeben. Wenn dieses Argument weggelassen wird, werden die Standardwerte für die aktuelle Sitzung verwendet.

Beispiel

Hier ist ein Beispiel, um zu demonstrieren, wie die Funktion funktioniert:

SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;

Ergebnis:

    RESULT 
__________ 
 12,345   

Das erste Argument ist die tatsächliche Zahl, die wir formatieren, und das zweite Argument ist das Formatmodell. Das Formatmodell gibt an, wie die Zahl formatiert wird.

In diesem Fall formatiert unser Formatmodell die Zahl mit einem Gruppentrennzeichen an der entsprechenden Stelle. Jede Ziffer wird durch 9 dargestellt , und das Gruppentrennzeichen wird durch G dargestellt .

Folgendes passiert, wenn wir das Formatmodell geringfügig ändern:

SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;

Ergebnis:

     RESULT 
___________ 
 012,345    

In diesem Fall haben wir das Formatmodell mit einer 0 begonnen Charakter. Dies gibt wo immer möglich eine führende Null zurück. Die 9 Zeichen gibt keine führenden Nullen zurück.

Tatsächlich könnten wir alle 9 ersetzen s mit 0 s wenn wir wollen. Hier ist ein Vergleich, der zeigt, dass die Ergebnisse je nach verwendetem Formatelement ziemlich unterschiedlich sein können:

SELECT 
    TO_CHAR(12, '000G000') AS "000G000",
    TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;

Ergebnis:

    000G000     999G999 
___________ ___________ 
 000,012          12    

Währungssymbole

Sie können das L verwenden format-Element, um das lokale Währungssymbol zurückzugeben.

Beispiel:

SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;

Ergebnis:

                 RESULT 
_______________________ 
          $12,345.00   

Dieses Beispiel verwendet ein Formatmodell, das das Ergebnis unter Verwendung des lokalen Währungssymbols ausgibt (dargestellt durch L ), ein Gruppentrennzeichen (dargestellt durch G ), ein Dezimalzeichen (dargestellt durch D ) und natürlich jede Ziffer (dargestellt durch 9 ).

Das lokale Währungssymbol wird durch den aktuellen Wert von NLS_CURRENCY bestimmt Parameter. Es ist wahr, dass wir ein Dollarzeichen ($ ) für das Währungssymbol, aber das setzt voraus, dass die Währung auf Dollar lautet. Es gibt viele andere mögliche Währungen auf der ganzen Welt und das L format-Element kann das lokale Währungssymbol für die Sitzung des Benutzers dynamisch zurückgeben.

Siehe So überprüfen Sie die Werte der NLS-Parameter, wenn Sie sie überprüfen müssen.

Siehe diese vollständige Liste der Zahlenformatelemente in Oracle für eine Liste der Formatelemente, die zum Formatieren von Zahlen mit dieser Funktion verwendet werden können.

Standardformat

Wenn Sie fmt weglassen Argument wird die Zahl in einen VARCHAR2 umgewandelt Wert genau lang genug, um seine signifikanten Stellen aufzunehmen.

Hier ist ein Beispiel für die Umwandlung einer Zahl ohne Angabe des Formats:

SELECT TO_CHAR(525.45)
FROM DUAL;

Ergebnis:

525.45

Der 'nlsparam' Argument

Der 'nlsparam' Argument kann verwendet werden, um das Dezimalzeichen und das Gruppentrennzeichen, das lokale Währungssymbol und das internationale Währungssymbol anzugeben.

Es hat folgende Form:

'NLS_NUMERIC_CHARACTERS = ''dg''
   NLS_CURRENCY = ''text''
   NLS_ISO_CURRENCY = territory '

Beispiel:

SELECT 
    TO_CHAR(
        1234.56, 
        'L99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Ergebnis:

         €1.234,56

Hier ist es wieder, aber dieses Mal ersetze ich L mit C im Format model:

SELECT 
    TO_CHAR(
        1234.56, 
        'C99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Ergebnis:

      EUR1.234,56

Das C gibt das ISO-Währungssymbol zurück, in diesem Fall EUR .

So unterdrücken Sie die Auffüllung

Sie haben vielleicht bemerkt, dass bei einigen Beispielen auf der linken Seite der Ergebnisse Auffüllungen angewendet wurden. Solche Auffüllungen können mit fm entfernt werden Formatmodifikator.

Beispiel:

SELECT 
    TO_CHAR(
        1234.56, 
        'fmL99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Ergebnis:

         €1.234,56

Null-Argumente

Übergabe von null ergibt null :

SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;

Ergebnis:

null

Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn null tritt als Ergebnis eines SQL SELECT auf Erklärung.

Sie können jedoch SET NULL verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null zurückgegeben werden soll.

Fehlendes Argument

Der Aufruf der Funktion ohne Übergabe von Argumenten führt zu einem Fehler:

SELECT TO_CHAR()
FROM DUAL;

Ergebnis:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

Das Übergeben zu vieler Argumente führt ebenfalls zu einem Fehler:

SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;

Ergebnis:

SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"