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

Función TRUNC(número) en Oracle

En Oracle Database, el TRUNC(number) La función devuelve un número dado, truncado a un número dado de lugares decimales.

Oracle también tiene un TRUNC(date) función, que se utiliza en las fechas. Este artículo es únicamente sobre el TRUNC(number) función, que se utiliza en los números.

Sintaxis

La sintaxis es así:

TRUNC(n1 [, n2 ])

Donde n1 es el valor a truncar, y n2 es un argumento opcional que especifica cuántos lugares decimales truncar n1 para. Si n2 se omite, entonces n1 se trunca a cero decimales.

n1 puede ser cualquier tipo de dato numérico o cualquier tipo de dato no numérico que se pueda convertir implícitamente a un tipo de dato numérico.

Ejemplo

He aquí un ejemplo:

SELECT TRUNC(3.95)
FROM DUAL;

Resultado:

   TRUNC(3.95) 
______________ 
             3

Especifique un lugar decimal

Aquí hay un ejemplo de cómo pasar un segundo argumento para especificar a cuántos lugares decimales truncar el valor:

SELECT TRUNC(1.25817, 2)
FROM DUAL;

Resultado:

   TRUNC(1.25817,2) 
___________________ 
               1.25

Aquí hay algunos más:

SELECT 
    TRUNC(1.25817, 1) AS "1",
    TRUNC(1.25817, 2) AS "2",
    TRUNC(1.25817, 3) AS "3",
    TRUNC(1.25817, 4) AS "4"
FROM DUAL;

Resultado:

     1       2        3         4 
______ _______ ________ _________ 
   1.2    1.25    1.258    1.2581 

Posiciones decimales negativas

El segundo argumento puede ser un valor negativo si es necesario. Pasar un valor negativo genera dígitos a la izquierda del lugar decimal para convertirse en cero.

Ejemplo:

SELECT TRUNC(6973.45, -2)
FROM DUAL;

Resultado:

   TRUNC(6973.45,-2) 
____________________ 
                6900

Comparado con ROUND()

El TRUNC() la función es diferente a ROUND() función. El ROUND() La función redondea el número hacia arriba en algunos casos y hacia abajo en otros. El TRUNC() La función, por otro lado, simplemente trunca el número sin redondearlo.

Aquí hay una comparación para demostrar esta diferencia:

SELECT 
    TRUNC(3.6789, 2),
    ROUND(3.6789, 2)
FROM DUAL;

Resultado:

   TRUNC(3.6789,2)    ROUND(3.6789,2) 
__________________ __________________ 
              3.67               3.68 

También es diferente al FLOOR() función, que devuelve el entero más grande igual o menor que su argumento. FLOOR() no acepta un segundo argumento como ROUND() y TRUNC() do (solo devuelve un número entero de todos modos).

Valores nulos

Si algún argumento es null , el resultado es null :

SET NULL 'null';

SELECT 
    TRUNC(null, 2),
    TRUNC(2.35, null),
    TRUNC(null, null)
FROM DUAL;

Resultado:

   TRUNC(NULL,2)    TRUNC(2.35,NULL)    TRUNC(NULL,NULL) 
________________ ___________________ ___________________ 
            null                null                null 

De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que se produce un valor nulo 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.

Argumentos no numéricos

Esto es lo que sucede cuando proporcionamos argumentos no numéricos:

SELECT TRUNC('Hundred', 'Two')
FROM DUAL;

Resultado:

Error starting at line : 1 in command -
SELECT TRUNC('Hundred', 'Two')
FROM DUAL
Error report -
ORA-01722: invalid number

Recuento de argumentos no válidos

Llamando a TRUNC() con el número incorrecto de argumentos, o sin un argumento da como resultado un error:

SELECT TRUNC()
FROM DUAL;

Resultado:

Error starting at line : 1 in command -
SELECT TRUNC()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Y:

SELECT TRUNC(1, 2, 3)
FROM DUAL;

Resultado:

Error starting at line : 1 in command -
SELECT TRUNC(1, 2, 3)
FROM DUAL
Error at Command Line : 1 Column : 20
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action: