sql >> Base de Datos >  >> RDS >> Oracle

Función TRANSLATE(... USING) en Oracle

En Oracle, TRANSLATE(...USING) La función convierte su argumento en el juego de caracteres especificado para conversiones entre el juego de caracteres de la base de datos y el juego de caracteres nacional.

Esta función no debe confundirse con el TRANSLATE() función, que le permite realizar varias sustituciones de un solo carácter, uno a uno en una sola operación.

El TRANSLATE(...USING) La función se admite en Oracle principalmente para la compatibilidad con ANSI. Oracle recomienda que usemos TO_CHAR() y TO_NCHAR() funciones en su lugar.

Sintaxis

La sintaxis es así:

TRANSLATE ( char USING
          { CHAR_CS | NCHAR_CS }
          )

Donde char es la expresión a convertir, y:

  • Especificando el USING CHAR_CS el argumento convierte char en el juego de caracteres de la base de datos. El tipo de datos de salida es VARCHAR2 .
  • Especificando el USING NCHAR_CS el argumento convierte char en el conjunto de caracteres nacionales. El tipo de datos de salida es NVARCHAR2 .

Ejemplo

He aquí un ejemplo básico:

SELECT 
    TRANSLATE('Cat' USING CHAR_CS) AS CHAR_CS,
    TRANSLATE('Cat' USING NCHAR_CS) AS NCHAR_CS
FROM DUAL;

Resultado:

   CHAR_CS    NCHAR_CS 
__________ ___________ 
Cat        Cat        

Para demostrar la diferencia, esto es lo que sucede cuando lo pasamos a DUMP() función:

SELECT 
    DUMP(TRANSLATE('Cat' USING CHAR_CS), 17) AS CHAR_CS,
    DUMP(TRANSLATE('Cat' USING NCHAR_CS), 17) AS NCHAR_CS
FROM DUAL;

Resultado:

              CHAR_CS                       NCHAR_CS 
_____________________ ______________________________ 
Typ=1 Len=3: C,a,t    Typ=1 Len=6: ^@,C,^@,a,^@,t   

Argumentos nulos

Pasando null ya que el argumento devuelve null :

SET NULL 'null';
SELECT 
    TRANSLATE(null USING CHAR_CS) AS Result
FROM DUAL;

Resultado:

null

De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null ocurre como resultado de un SQL SELECT declaración.

Sin embargo, puede usar SET NULL para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null debe ser devuelto.

Argumento faltante

Llamar a la función sin pasar el char el argumento da como resultado un error:

SELECT TRANSLATE(USING CHAR_CS)
FROM DUAL;

Resultado:

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: