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: