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: