In Oracle Database is de TRUNC(date)
functie retourneert de gegeven datumwaarde met het tijdgedeelte van de dag afgekapt tot de eenheid die is opgegeven in het opgegeven formaatmodel.
Oracle heeft ook een TRUNC(number)
syntaxis, die op getallen wordt gebruikt. Dit artikel gaat uitsluitend over de TRUNC(date)
syntaxis, die wordt gebruikt op datums.
Syntaxis
De syntaxis gaat als volgt:
TRUNC(date [, fmt ])
Waar date
is de datum die moet worden afgekapt, en fmt
is een optioneel formaatmodel dat een eenheid specificeert waarvoor de waarde moet worden afgekapt. Het formaatmodel kan elk van de ondersteunde formaatmodellen zijn voor de TRUNC(date)
en ROUND(date)
functies.
De functie werkt volgens de regels van de Gregoriaanse kalender (het is niet gevoelig voor de waarde van de NLS_CALENDAR
parameter).
Voorbeeld
Hier is een voorbeeld:
SELECT TRUNC(DATE '2035-08-22', 'MONTH')
FROM DUAL;
Resultaat:
01-AUG-35
Hier zijn er nog meer:
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;
Resultaat:
D DD Month Year CC ____________ ____________ ____________ ____________ ____________ 19-AUG-35 22-AUG-35 01-AUG-35 01-JAN-35 01-JAN-01
Het resultaat wordt opgemaakt volgens het datumformaat voor de huidige sessie. Zie Hoe u de datumnotatie van de huidige sessie kunt controleren en hoe u de datumnotatie voor de huidige sessie kunt wijzigen voor meer informatie hierover.
Standaard datumeenheid
De standaard datumeenheid is DD
:
SELECT
TRUNC(DATE '2035-08-22') AS "Default",
TRUNC(DATE '2035-08-22', 'DD') AS "DD"
FROM DUAL;
Resultaat:
Default DD ____________ ____________ 22-AUG-35 22-AUG-35
Vergeleken met ROUND()
De TRUNC(date)
functie is anders dan de ROUND(date)
functie. De ROUND()
functie rondt de datum in sommige gevallen naar boven af en in andere naar beneden. De TRUNC()
functie daarentegen kapt de datum eenvoudig af tot de opgegeven eenheid zonder afronding.
Hier is een vergelijking om dit verschil aan te tonen:
SELECT
TRUNC(DATE '2030-12-31', 'MONTH') AS "Trunc",
ROUND(DATE '2030-12-31', 'MONTH') AS "Round"
FROM DUAL;
Resultaat:
Trunc Round ____________ ____________ 01-DEC-30 01-JAN-31
Null-waarden
Als een van beide argumenten null
. is , het resultaat is null
:
SET NULL 'null';
SELECT
TRUNC(null, 'D'),
TRUNC(date'2020-12-30', null)
FROM DUAL;
Resultaat:
TRUNC(NULL,'D') TRUNC(DATE'2020-12-30',NULL) __________________ _______________________________ null null
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer een null-waarde optreedt als resultaat van een SQL SELECT
uitspraak.
U kunt echter SET NULL
. gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null
moet worden geretourneerd.
Ongeldig aantal argumenten
TRUNC()
. aanroepen zonder een argument resulteert in een fout:
SELECT TRUNC()
FROM DUAL;
Resultaat:
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:
En het aanroepen met te veel argumenten resulteert in een fout:
SELECT TRUNC(1, 2, 3)
FROM DUAL;
Resultaat:
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: