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

TRANSLATE(… USING) Funktion in Oracle

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 konvertiert char in den Zeichensatz der Datenbank. Der Ausgabedatentyp ist VARCHAR2 .
  • Angabe des USING NCHAR_CS Argument konvertiert char in den nationalen Zeichensatz. Der Ausgabedatentyp ist NVARCHAR2 .

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: