I Oracle Database er TRUNC(date)
funktion returnerer den givne datoværdi med tidsdelen af dagen afkortet til den enhed, der er angivet i den specificerede formatmodel.
Oracle har også en TRUNC(number)
syntaks, som bruges på tal. Denne artikel handler udelukkende om TRUNC(date)
syntaks, som bruges på datoer.
Syntaks
Syntaksen ser sådan ud:
TRUNC(date [, fmt ])
Hvor date
er datoen, der skal afkortes, og fmt
er en valgfri formatmodel, der angiver en enhed, som værdien skal afkortes for. Formatmodellen kan være enhver af de understøttede formatmodeller for TRUNC(date)
og ROUND(date)
funktioner.
Funktionen fungerer i henhold til reglerne i den gregorianske kalender (den er ikke følsom over for værdien af NLS_CALENDAR
parameter).
Eksempel
Her er et eksempel:
SELECT TRUNC(DATE '2035-08-22', 'MONTH')
FROM DUAL;
Resultat:
01-AUG-35
Her er nogle flere:
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;
Resultat:
D DD Month Year CC ____________ ____________ ____________ ____________ ____________ 19-AUG-35 22-AUG-35 01-AUG-35 01-JAN-35 01-JAN-01
Resultatet formateres i henhold til datoformatet for den aktuelle session. Se, hvordan du kontrollerer datoformatet for den aktuelle session, og hvordan du ændrer datoformatet for den aktuelle session for at få flere oplysninger om det.
Standard datoenhed
Standarddatoenheden er DD
:
SELECT
TRUNC(DATE '2035-08-22') AS "Default",
TRUNC(DATE '2035-08-22', 'DD') AS "DD"
FROM DUAL;
Resultat:
Default DD ____________ ____________ 22-AUG-35 22-AUG-35
Sammenlignet med ROUND()
TRUNC(date)
funktionen er forskellig fra ROUND(date)
fungere. ROUND()
funktion runder datoen op i nogle tilfælde og nedad i andre. TRUNC()
funktion på den anden side afkorter blot datoen til den angivne enhed uden afrunding.
Her er en sammenligning for at demonstrere denne forskel:
SELECT
TRUNC(DATE '2030-12-31', 'MONTH') AS "Trunc",
ROUND(DATE '2030-12-31', 'MONTH') AS "Round"
FROM DUAL;
Resultat:
Trunc Round ____________ ____________ 01-DEC-30 01-JAN-31
Nul-værdier
Hvis et af argumenterne er null
, resultatet er null
:
SET NULL 'null';
SELECT
TRUNC(null, 'D'),
TRUNC(date'2020-12-30', null)
FROM DUAL;
Resultat:
TRUNC(NULL,'D') TRUNC(DATE'2020-12-30',NULL) __________________ _______________________________ null null
Som standard returnerer SQLcl og SQL*Plus et tomt mellemrum, når der opstår en null-værdi som et resultat af en SQL SELECT
udmelding.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null
skal returneres.
Ugyldigt antal argumenter
Kalder TRUNC()
uden et argument resulterer i en fejl:
SELECT TRUNC()
FROM DUAL;
Resultat:
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:
Og at kalde det med for mange argumenter resulterer i en fejl:
SELECT TRUNC(1, 2, 3)
FROM DUAL;
Resultat:
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: