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 TypNUMBER
sein ,BINARY_FLOAT
, oderBINARY_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"