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

Función TO_CHAR(número) en Oracle

En Oracle Database, el TO_CHAR(number) función convierte un número a un VARCHAR2 valor en el formato especificado por el argumento de formato.

Sintaxis

La sintaxis es así:

TO_CHAR(n [, fmt [, 'nlsparam' ] ])

donde:

  • n puede ser de tipo NUMBER , BINARY_FLOAT o BINARY_DOUBLE .
  • fmt es un modelo de formato opcional que especifica cómo debe formatearse el resultado. Vea los elementos de formato de número válidos que se pueden usar para construir su modelo de formato.
  • 'nlsparam' es un argumento opcional que especifica cómo se devuelven varios caracteres. Puede usarlo para especificar el carácter decimal y el separador de grupo, el símbolo de moneda local y el símbolo de moneda internacional. Si se omite este argumento, se utilizan los valores predeterminados para la sesión actual.

Ejemplo

Aquí hay un ejemplo para demostrar cómo funciona la función:

SELECT TO_CHAR(12345, '99G999') AS Result
FROM DUAL;

Resultado:

    RESULT 
__________ 
 12,345   

El primer argumento es el número real que estamos formateando y el segundo argumento es el modelo de formato. El modelo de formato especifica cómo se formatea el número.

En este caso, nuestro modelo de formato formatea el número con un separador de grupo en la posición adecuada. Cada dígito numérico está representado por 9 , y el separador de grupos está representado por G .

Esto es lo que sucede si cambiamos ligeramente el modelo de formato:

SELECT TO_CHAR(12345, '099G999') AS Result
FROM DUAL;

Resultado:

     RESULT 
___________ 
 012,345    

En este caso, comenzamos el modelo de formato con un 0 personaje. Esto devuelve un cero inicial donde corresponda. El 9 el carácter no devuelve ceros a la izquierda.

De hecho, podríamos reemplazar todos los 9 s con 0 si queremos. Aquí hay una comparación que muestra cómo los resultados pueden diferir considerablemente, según el elemento de formato que use:

SELECT 
    TO_CHAR(12, '000G000') AS "000G000",
    TO_CHAR(12, '999G999') AS "999G999"
FROM DUAL;

Resultado:

    000G000     999G999 
___________ ___________ 
 000,012          12    

Símbolos de moneda

Puedes usar la L elemento de formato para devolver el símbolo de la moneda local.

Ejemplo:

SELECT TO_CHAR(12345, 'L99G999D99') AS Result
FROM DUAL;

Resultado:

                 RESULT 
_______________________ 
          $12,345.00   

Este ejemplo usa un modelo de formato que genera el resultado usando el símbolo de moneda local (representado por L ), un separador de grupo (representado por G ), un carácter decimal (representado por D ), y por supuesto, cada dígito numérico (representado por 9 ).

El símbolo de la moneda local está determinado por el valor actual de la NLS_CURRENCY parámetro. Es cierto que podríamos haber usado un signo de dólar ($ ) para el símbolo de la moneda, pero eso supone que la moneda está denominada en dólares. Hay muchas otras monedas posibles en todo el mundo, y la L El elemento de formato puede devolver dinámicamente el símbolo de moneda local para la sesión del usuario.

Consulte Cómo verificar los valores de los parámetros NLS si necesita verificarlos.

Consulte esta Lista completa de elementos de formato de número en Oracle para obtener una lista de elementos de formato que se pueden usar para formatear números con esta función.

Formato predeterminado

Si omite el fmt argumento, el número se convierte en un VARCHAR2 valor exactamente el tiempo suficiente para contener sus dígitos significativos.

Este es un ejemplo de conversión de un número sin especificar el formato:

SELECT TO_CHAR(525.45)
FROM DUAL;

Resultado:

525.45

El 'nlsparam' Argumento

El 'nlsparam' El argumento se puede usar para especificar el carácter decimal y el separador de grupo, el símbolo de moneda local y el símbolo de moneda internacional.

Toma la siguiente forma:

'NLS_NUMERIC_CHARACTERS = ''dg''
   NLS_CURRENCY = ''text''
   NLS_ISO_CURRENCY = territory '

Ejemplo:

SELECT 
    TO_CHAR(
        1234.56, 
        'L99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Resultado:

         €1.234,56

Aquí está de nuevo, pero esta vez reemplazo L con C en el modelo de formato:

SELECT 
    TO_CHAR(
        1234.56, 
        'C99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Resultado:

      EUR1.234,56

El C devuelve el símbolo de moneda ISO, que en este caso es EUR .

Cómo suprimir el relleno

Es posible que haya notado que algunos de los ejemplos tienen relleno aplicado a la izquierda de los resultados. Dicho relleno se puede eliminar con fm modificador de formato.

Ejemplo:

SELECT 
    TO_CHAR(
        1234.56, 
        'fmL99G999D99',
        'NLS_NUMERIC_CHARACTERS = '',.''
        NLS_CURRENCY = ''€''
        NLS_ISO_CURRENCY = Germany'
    )
FROM DUAL;

Resultado:

€1.234,56

Argumentos nulos

Pasando null da como resultado null :

SET NULL 'null';
SELECT TO_CHAR(null)
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 ningún argumento da como resultado un error:

SELECT TO_CHAR()
FROM DUAL;

Resultado:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

Pasar demasiados argumentos también genera un error:

SELECT TO_CHAR(123, '99', 'NLS_ISO_CURRENCY = GERMANY', 'oops!' )
FROM DUAL;

Resultado:

SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"