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

Cómo dar formato a un número como moneda en Oracle

Oracle Database proporciona el TO_CHAR(number) función que le permite formatear números en función de un modelo de formato determinado. Hay tres elementos de formato que puede usar con TO_CHAR() para devolver un valor como moneda.

Elementos del formato de moneda

Los elementos de formato de moneda son L , C y U .

C Devuelve el símbolo de moneda ISO (el valor actual de la NLS_ISO_CURRENCY parámetro).
L Devuelve el símbolo de la moneda local (el valor actual de la NLS_CURRENCY parámetro).
U Devuelve el símbolo de moneda dual del euro (u otro), determinado por el valor actual de la NLS_DUAL_CURRENCY parámetro.

Estos modelos de formato le permiten generar el signo de moneda según la configuración de su moneda/región, en lugar de tener que proporcionar un símbolo de moneda fijo.

Si bien es cierto que puede proporcionar un literal de cadena para la moneda (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.

Ejemplo

Aquí hay un ejemplo para demostrarlo:

ALTER SESSION SET NLS_TERRITORY = 'Australia';
SELECT 
    TO_CHAR(12345, 'fmL99G999D00') AS "r1",
    TO_CHAR(12345, 'fmC99G999D00') AS "r3",
    TO_CHAR(12345, 'fmU99G999D00') AS "r3"
FROM DUAL;

Resultado:

           r1              r3            r3 
_____________ _______________ _____________ 
$12,345.00    AUD12,345.00    $12,345.00   

La única diferencia entre estas tres columnas es el elemento de formato de moneda. El primero usa L , el segundo usa C , y el tercero usa U .

Todos usan el fm modificador de formato para suprimir cualquier relleno. También usan el 9 y 0 elementos de formato para generar los números (el 0 elemento incluye ceros iniciales/posteriores). También incluyen un separador de grupo (representado por G ), un carácter decimal (representado por D ).

Divisas duales

En el ejemplo anterior, configuré el NLS_TERRITORY a Australia . Esto dio como resultado que se devolviera el mismo símbolo de moneda en dos de las tres columnas (es decir, el r1 y r3 columnas).

En el siguiente ejemplo, uso un territorio diferente:

ALTER SESSION SET NLS_TERRITORY = 'Denmark';
SELECT 
    TO_CHAR(12345, 'fmL99G999D00') AS "r1",
    TO_CHAR(12345, 'fmC99G999D00') AS "r3",
    TO_CHAR(12345, 'fmU99G999D00') AS "r3"
FROM DUAL;

Resultado:

            r1              r3            r3 
______________ _______________ _____________ 
kr12.345,00    DKK12.345,00    €12.345,00   

Esta vez obtenemos un símbolo de moneda diferente para cada uno de los r1 y r3 columnas.

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

El 'nlsparam' Argumento

Al usar TO_CHAR() función, el 'nlsparam' El argumento se puede utilizar 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, 
        'fmL99G999D99',
        '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, 
        'fmC99G999D99',
        '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 .

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 TO_CHAR() función.