Oracle
 sql >> Database >  >> RDS >> Oracle

TRUNC(data) Funzione in Oracle

In Oracle Database, il TRUNC(date) la funzione restituisce il valore della data specificato con la parte temporale del giorno troncata all'unità fornita nel modello di formato specificato.

Oracle ha anche un TRUNC(number) sintassi, che è usata sui numeri. Questo articolo riguarda esclusivamente il TRUNC(date) sintassi, che viene utilizzata nelle date.

Sintassi

La sintassi è questa:

TRUNC(date [, fmt ])

Dove date è la data da troncare e fmt è un modello di formato opzionale che specifica un'unità per la quale troncare il valore. Il modello di formato può essere uno qualsiasi dei modelli di formato supportati per TRUNC(date) e ROUND(date) funzioni.

La funzione opera secondo le regole del calendario gregoriano (non è sensibile al valore del NLS_CALENDAR parametro).

Esempio

Ecco un esempio:

SELECT TRUNC(DATE '2035-08-22', 'MONTH')
FROM DUAL;

Risultato:

01-AUG-35

Eccone altri:

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;

Risultato:

           D           DD        Month         Year           CC 
____________ ____________ ____________ ____________ ____________ 
19-AUG-35    22-AUG-35    01-AUG-35    01-JAN-35    01-JAN-01   

Il risultato viene formattato in base al formato della data per la sessione corrente. Vedi Come controllare il formato della data della sessione corrente e Come modificare il formato della data per la sessione corrente per ulteriori informazioni al riguardo.

Unità di data predefinita

L'unità di data predefinita è DD :

SELECT 
    TRUNC(DATE '2035-08-22') AS "Default",
    TRUNC(DATE '2035-08-22', 'DD') AS "DD"
FROM DUAL;

Risultato:

     Default           DD 
____________ ____________ 
22-AUG-35    22-AUG-35   

Rispetto a ROUND()

Il TRUNC(date) la funzione è diversa da ROUND(date) funzione. Il ROUND() la funzione arrotonda la data per eccesso in alcuni casi e per difetto in altri. Il TRUNC() la funzione, d'altra parte, tronca semplicemente la data all'unità specificata senza arrotondare.

Ecco un confronto per dimostrare questa differenza:

SELECT 
    TRUNC(DATE '2030-12-31', 'MONTH') AS "Trunc",
    ROUND(DATE '2030-12-31', 'MONTH') AS "Round"
FROM DUAL;

Risultato:

       Trunc        Round 
____________ ____________ 
01-DEC-30    01-JAN-31   

Valori Nulli

Se uno dei due argomenti è null , il risultato è null :

SET NULL 'null';
SELECT 
    TRUNC(null, 'D'),
    TRUNC(date'2020-12-30', null)
FROM DUAL;

Risultato:

   TRUNC(NULL,'D')    TRUNC(DATE'2020-12-30',NULL) 
__________________ _______________________________ 
              null null                           

Per impostazione predefinita, SQLcl e SQL*Plus restituiscono uno spazio vuoto ogni volta che si verifica un valore nullo come risultato di un SQL SELECT dichiarazione.

Tuttavia, puoi utilizzare SET NULL per specificare una stringa diversa da restituire. Qui ho specificato che la stringa null deve essere restituito.

Conteggio argomenti non valido

Chiamando TRUNC() senza un argomento genera un errore:

SELECT TRUNC()
FROM DUAL;

Risultato:

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:

E chiamarlo con troppi argomenti genera un errore:

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

Risultato:

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: