In Oracle das TRANSLATE(...USING)
Funktion konvertiert ihr Argument in den Zeichensatz, der für Konvertierungen zwischen dem Datenbankzeichensatz und dem nationalen Zeichensatz angegeben ist.
Diese Funktion darf nicht mit dem TRANSLATE()
verwechselt werden Funktion, mit der Sie mehrere einzelne Zeichen eins zu eins in einem Vorgang ersetzen können.
Der TRANSLATE(...USING)
Die Funktion wird in Oracle hauptsächlich aus Gründen der ANSI-Kompatibilität unterstützt. Oracle empfiehlt die Verwendung von TO_CHAR()
und TO_NCHAR()
funktioniert stattdessen.
Syntax
Die Syntax lautet wie folgt:
TRANSLATE ( char USING
{ CHAR_CS | NCHAR_CS }
)
Wobei char
der umzuwandelnde Ausdruck ist und:
- Angabe des
USING
CHAR_CS
Argument konvertiertchar
in den Zeichensatz der Datenbank. Der Ausgabedatentyp istVARCHAR2
. - Angabe des
USING
NCHAR_CS
Argument konvertiertchar
in den nationalen Zeichensatz. Der Ausgabedatentyp istNVARCHAR2
.
Beispiel
Hier ist ein einfaches Beispiel:
SELECT
TRANSLATE('Cat' USING CHAR_CS) AS CHAR_CS,
TRANSLATE('Cat' USING NCHAR_CS) AS NCHAR_CS
FROM DUAL;
Ergebnis:
CHAR_CS NCHAR_CS __________ ___________ Cat Cat
Um den Unterschied zu demonstrieren, passiert Folgendes, wenn wir es an DUMP()
übergeben Funktion:
SELECT
DUMP(TRANSLATE('Cat' USING CHAR_CS), 17) AS CHAR_CS,
DUMP(TRANSLATE('Cat' USING NCHAR_CS), 17) AS NCHAR_CS
FROM DUAL;
Ergebnis:
CHAR_CS NCHAR_CS _____________________ ______________________________ Typ=1 Len=3: C,a,t Typ=1 Len=6: ^@,C,^@,a,^@,t
Null-Argumente
Übergabe von null
da das Argument null
zurückgibt :
SET NULL 'null';
SELECT
TRANSLATE(null USING CHAR_CS) AS Result
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
Aufruf der Funktion mit ohne Übergabe des char
Argument führt zu einem Fehler:
SELECT TRANSLATE(USING CHAR_CS)
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT TRANSLATE(USING CHAR_CS) FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: