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

Función TRUNC (fecha) en Oracle

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: