En Oracle Database, puede dar formato a los números de muchas maneras.
Por ejemplo, puede dar formato a un número como moneda, con comas y puntos decimales en el lugar correcto. Puede especificar ceros a la izquierda, puede agregar una parte fraccionaria o eliminarla, si eso es lo que se requiere.
Este artículo contiene ejemplos de lo siguiente:
- Dar formato a los números como moneda
- Agregue un separador de coma/miles
- Incluir lugares decimales
- Eliminar todos los lugares decimales
- Añadir ceros a la izquierda de un número
También explico cómo el formato se ve afectado por los parámetros NLS de su sesión.
Los parámetros de inicialización de NLS determinan qué caracteres se utilizan para el separador de grupo, el carácter decimal y el símbolo de moneda en la sesión actual. Puede aprovechar estos parámetros para generar un formato compatible con la configuración regional.
Puede usar funciones como TO_CHAR(number)
e incluso LPAD()
para convertir números en una cadena y formatearlos exactamente como quieras sobre la marcha. Funciones como CAST()
también puede tener un efecto en cómo se formatea un número, según el tipo de datos al que se convierte.
Un ejemplo rápido
Aquí hay un ejemplo rápido de formatear un número usando TO_CHAR()
función:
SELECT
TO_CHAR(12345, 'fmL99G999D00')
FROM DUAL;
Resultado:
$12,345.00
El fmL99G999D00
part es un modelo de formato que determina cómo se va a formatear la salida. Puede cambiar el modelo de formato para adaptarlo a sus necesidades.
Cada carácter del modelo de formato es un elemento de formato y tiene un significado especial. Puede agregar o eliminar elementos de formato según sea necesario.
Aquí hay una lista completa de elementos de formato que puede usar para su modelo de formato al formatear números.
Si bien es cierto que puede proporcionar un literal de cadena para varios elementos de formato (por ejemplo, un signo de dólar ($
) para dólares), esto supone que la moneda está denominada en ese valor codificado. Hay muchas otras monedas posibles en todo el mundo, y los elementos de formato pueden devolver dinámicamente el símbolo de la moneda local para la sesión del usuario.
Es lo mismo para el separador de grupo y el carácter decimal. Los diferentes lugares usan diferentes convenciones. El uso de estos elementos de formato conscientes de la configuración regional hace que su código sea más portátil.
Además, el TO_CHAR()
le permite pasar sus propios parámetros NLS dentro de la función. Hacerlo solo afecta esa llamada de función, por lo que puede cambiar cosas como los símbolos de moneda sobre la marcha sin necesidad de codificarlo en su modelo de formato o actualizar los parámetros NLS para su sesión.
Los siguientes ejemplos muestran cómo funciona cada elemento de formato con más detalle.
Dar formato a números como moneda
Este es un ejemplo de formato de un número como moneda:
SELECT
TO_CHAR(12, 'fmL99')
FROM DUAL;
Resultado:
$12
En este caso, utilicé la L
elemento de formato para especificar el símbolo de la moneda local. El símbolo de la moneda local está determinado por NLS_CURRENCY
parámetro.
Alternativamente, puede utilizar la C
o U
elementos de formato, que devuelven el símbolo de moneda ISO y el símbolo de moneda dual respectivamente.
Consulte Cómo dar formato a números como moneda en Oracle para obtener más información y ejemplos.
Añadir un separador de coma/miles
Si bien siempre puede usar una coma codificada para su separador de miles/grupos, esto no tiene en cuenta los países que usan un punto para su separador de grupos. Lo contrario es obviamente cierto. Además, algunos países separan miles de grupos con un espacio delgado.
Puedes usar la G
elemento de formato para especificar un separador de grupo. Esto devuelve dinámicamente el separador de grupo aplicable como se especifica en NLS_NUMERIC_CHARACTERS
parámetro. Este parámetro determina tanto el separador de grupo como el carácter decimal.
Ejemplo:
SELECT
TO_CHAR(12345, 'fm99G999')
FROM DUAL;
Resultado:
12,345
Aquí hay otro ejemplo con un número mayor:
SELECT
TO_CHAR(123456789, 'fm999G999G999')
FROM DUAL;
Resultado:
123,456,789
Consulte Cómo formatear un número con una coma en Oracle para obtener una discusión más detallada.
Incluir lugares decimales
Si bien es cierto que puede codificar su propio carácter radix (por ejemplo, un punto) en su modelo de formato, esto no se adaptará a otras configuraciones regionales que usan un carácter diferente.
Puedes usar la D
elemento de formato para devolver el carácter decimal/raíz que se especifica en NLS_NUMERIC_CHARACTERS
parámetro para la sesión actual:
SELECT
TO_CHAR(7, 'fm9D00')
FROM DUAL;
Resultado:
7.00
En este caso usé dos 0
elementos de formato después del carácter radix. Este elemento de formato devuelve ceros finales cuando corresponde.
Usando un 9
suprimiría cualquier cero final en este caso:
SELECT
TO_CHAR(7, 'fm9D99')
FROM DUAL;
Resultado:
7.
Sin embargo, si eliminamos el fm
modificador de formato, obtenemos un resultado diferente:
SELECT
TO_CHAR(7, '9D99')
FROM DUAL;
Resultado:
7.00
El fm
El modificador de formato suprime cualquier relleno que se haya aplicado al resultado. Al eliminarlo, nuestro resultado se rellena. Contiene un espacio inicial, porque aquí es donde habría ido un signo negativo si el número hubiera sido negativo. Y también contiene ceros finales, porque especificamos dos 9
elementos de formato.
Consulte 3 formas de formatear un número con 2 decimales en Oracle para obtener más ideas sobre cómo formatear números con decimales.
Eliminar todos los lugares decimales
Hay varias formas de dar formato a un número para que no tenga decimales. Una forma obvia es simplemente eliminar la parte decimal de nuestra cadena de formato:
SELECT
TO_CHAR(7, 'fm9')
FROM DUAL;
Resultado:
7
Pero también podemos usar otras funciones, como ROUND()
, TRUNC()
y CAST()
para lograr el mismo efecto o similar.
Consulte 4 formas de dar formato a un número sin decimales en Oracle para ver ejemplos.
Añadir ceros a la izquierda
Tenemos un par de opciones cuando se trata de agregar ceros a la izquierda de nuestro número.
De nuevo, siguiendo con TO_CHAR()
función, podemos usar el 0
elemento de formato para devolver ceros iniciales y finales.
SELECT
TO_CHAR(7, 'fm000')
FROM DUAL;
Resultado:
007
Si hubiéramos usado el 9
elemento de formato, no tendríamos ceros a la izquierda:
SELECT
TO_CHAR(7, 'fm999')
FROM DUAL;
Resultado:
7
Sin embargo, si eliminamos el fm
modificador de formato, tendríamos un espacio donde cualquier cero inicial habría sido:
SELECT
TO_CHAR(7, '999')
FROM DUAL;
Resultado:
7
Otra forma de dar formato a un número con ceros a la izquierda es con LPAD()
función. Esta función aplica relleno izquierdo a una cadena o número. Puede especificar qué carácter/es usar para el relleno, por lo que si usa un cero, se rellenará con ceros.
Consulte 2 formas de dar formato a un número con ceros a la izquierda en Oracle para ver un ejemplo.
Cómo verificar los parámetros NLS
Los parámetros NLS (Soporte de idioma nacional) determinan el comportamiento específico de la configuración regional tanto en el cliente como en el servidor. Esto incluye parámetros que determinan qué caracteres usar para el separador de grupos, el carácter decimal, los símbolos de moneda, etc.
Verifiquemos el valor actual de mis parámetros NLS:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS;
Resultado:
PARAMETER VALUE __________________________ _________________________________ NLS_LANGUAGE ENGLISH NLS_TERRITORY AUSTRALIA NLS_CURRENCY $ NLS_ISO_CURRENCY AUSTRALIA NLS_NUMERIC_CHARACTERS ., NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD/MON/RR NLS_DATE_LANGUAGE ENGLISH NLS_CHARACTERSET AL32UTF8 NLS_SORT BINARY NLS_TIME_FORMAT HH12:MI:SSXFF AM NLS_TIMESTAMP_FORMAT DD/MON/RR HH12:MI:SSXFF AM NLS_TIME_TZ_FORMAT HH12:MI:SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD/MON/RR HH12:MI:SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE
Los siguientes parámetros determinan los elementos de formato para números y monedas:
NLS_CURRENCY
NLS_ISO_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_DUAL_CURRENCY
El valor predeterminado de estos parámetros está determinado por el NLS_TERRITORY
parámetro. Cuando establecemos el valor de NLS_TERRITORY
parámetro, esto establece implícitamente el valor de varios otros parámetros (incluidos los cuatro mencionados).
En mi caso, mi territorio es Australia, por lo que estos cuatro parámetros reflejan el formato típico de los números en Australia. Si tuviera que cambiarlo para decir, Alemania, entonces esos cuatro parámetros se actualizarían para reflejar el formato de Alemania.
Sin embargo, puede establecer explícitamente cada parámetro individualmente. Esto le permite anular el valor establecido implícitamente por NLS_TERRITORY
parámetro.