In Oracle, il TRANSLATE(...USING)
La funzione converte il suo argomento nel set di caratteri specificato per le conversioni tra il set di caratteri del database e il set di caratteri nazionale.
Questa funzione non deve essere confusa con il TRANSLATE()
funzione, che consente di effettuare più sostituzioni uno a uno di un carattere in un'unica operazione.
Il TRANSLATE(...USING)
la funzione è supportata in Oracle principalmente per la compatibilità ANSI. Oracle consiglia di utilizzare TO_CHAR()
e TO_NCHAR()
funzioni invece.
Sintassi
La sintassi è questa:
TRANSLATE ( char USING
{ CHAR_CS | NCHAR_CS }
)
Dove char
è l'espressione da convertire e:
- Specificare il
USING
CHAR_CS
argomento convertechar
nel set di caratteri del database. Il tipo di dati di output èVARCHAR2
. - Specificare il
USING
NCHAR_CS
argomento convertechar
nel set di caratteri nazionale. Il tipo di dati di output èNVARCHAR2
.
Esempio
Ecco un esempio di base:
SELECT
TRANSLATE('Cat' USING CHAR_CS) AS CHAR_CS,
TRANSLATE('Cat' USING NCHAR_CS) AS NCHAR_CS
FROM DUAL;
Risultato:
CHAR_CS NCHAR_CS __________ ___________ Cat Cat
Per dimostrare la differenza, ecco cosa succede quando lo passiamo a DUMP()
funzione:
SELECT
DUMP(TRANSLATE('Cat' USING CHAR_CS), 17) AS CHAR_CS,
DUMP(TRANSLATE('Cat' USING NCHAR_CS), 17) AS NCHAR_CS
FROM DUAL;
Risultato:
CHAR_CS NCHAR_CS _____________________ ______________________________ Typ=1 Len=3: C,a,t Typ=1 Len=6: ^@,C,^@,a,^@,t
Argomenti nulli
Passaggio null
poiché l'argomento restituisce null
:
SET NULL 'null';
SELECT
TRANSLATE(null USING CHAR_CS) AS Result
FROM DUAL;
Risultato:
null
Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che null
si verifica come risultato di un SQL SELECT
dichiarazione.
Tuttavia, puoi utilizzare SET NULL
per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null
deve essere restituito.
Argomento mancante
Chiamare la funzione con senza passare il char
l'argomento genera un errore:
SELECT TRANSLATE(USING CHAR_CS)
FROM DUAL;
Risultato:
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: