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

Cómo dar formato a los números en Oracle

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.