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 tipoNUMBER
,BINARY_FLOAT
oBINARY_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"