En Oracle Database, el TRUNC(date)
La función devuelve el valor de fecha dado con la parte de la hora del día truncada a la unidad proporcionada en el modelo de formato especificado.
Oracle también tiene un TRUNC(number)
sintaxis, que se utiliza en los números. Este artículo es únicamente sobre el TRUNC(date)
sintaxis, que se utiliza en las fechas.
Sintaxis
La sintaxis es así:
TRUNC(date [, fmt ])
Donde date
es la fecha a truncar, y fmt
es un modelo de formato opcional que especifica una unidad para la cual truncar el valor. El modelo de formato puede ser cualquiera de los modelos de formato admitidos para TRUNC(date)
y ROUND(date)
funciones.
La función opera de acuerdo con las reglas del calendario gregoriano (no es sensible al valor de NLS_CALENDAR
parámetro).
Ejemplo
He aquí un ejemplo:
SELECT TRUNC(DATE '2035-08-22', 'MONTH')
FROM DUAL;
Resultado:
01-AUG-35
Aquí hay algunos más:
SELECT
TRUNC(DATE '2035-08-22', 'D') AS "D",
TRUNC(DATE '2035-08-22', 'DD') AS "DD",
TRUNC(DATE '2035-08-22', 'MONTH') AS "Month",
TRUNC(DATE '2035-08-22', 'YEAR') AS "Year",
TRUNC(DATE '2035-08-22', 'CC') AS "CC"
FROM DUAL;
Resultado:
D DD Month Year CC ____________ ____________ ____________ ____________ ____________ 19-AUG-35 22-AUG-35 01-AUG-35 01-JAN-35 01-JAN-01
El resultado se formatea según el formato de fecha de la sesión actual. Consulte Cómo comprobar el formato de fecha de la sesión actual y Cómo cambiar el formato de fecha de la sesión actual para obtener más información al respecto.
Unidad de fecha predeterminada
La unidad de fecha predeterminada es DD
:
SELECT
TRUNC(DATE '2035-08-22') AS "Default",
TRUNC(DATE '2035-08-22', 'DD') AS "DD"
FROM DUAL;
Resultado:
Default DD ____________ ____________ 22-AUG-35 22-AUG-35
Comparado con ROUND()
El TRUNC(date)
la función es diferente a ROUND(date)
función. El ROUND()
La función redondea la fecha hacia arriba en algunos casos y hacia abajo en otros. El TRUNC()
La función, por otro lado, simplemente trunca la fecha a la unidad especificada sin redondear.
Aquí hay una comparación para demostrar esta diferencia:
SELECT
TRUNC(DATE '2030-12-31', 'MONTH') AS "Trunc",
ROUND(DATE '2030-12-31', 'MONTH') AS "Round"
FROM DUAL;
Resultado:
Trunc Round ____________ ____________ 01-DEC-30 01-JAN-31
Valores nulos
Si alguno de los argumentos es null
, el resultado es null
:
SET NULL 'null';
SELECT
TRUNC(null, 'D'),
TRUNC(date'2020-12-30', null)
FROM DUAL;
Resultado:
TRUNC(NULL,'D') TRUNC(DATE'2020-12-30',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.
Recuento de argumentos no válidos
Llamando a TRUNC()
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 llamarlo con demasiados argumentos da como resultado un error:
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: