I Oracle Database, TRUNC(date)
funktion returnerar det givna datumvärdet med tidsdelen av dagen trunkerad till den enhet som tillhandahålls i den specificerade formatmodellen.
Oracle har också en TRUNC(number)
syntax, som används på tal. Den här artikeln handlar enbart om TRUNC(date)
syntax, som används på datum.
Syntax
Syntaxen ser ut så här:
TRUNC(date [, fmt ])
Där date
är datumet som ska trunkeras och fmt
är en valfri formatmodell som anger en enhet för vilken värdet ska trunkeras. Formatmodellen kan vara vilken som helst av de formatmodeller som stöds för TRUNC(date)
och ROUND(date)
funktioner.
Funktionen fungerar enligt reglerna i den gregorianska kalendern (den är inte känslig för värdet på NLS_CALENDAR
parameter).
Exempel
Här är ett exempel:
SELECT TRUNC(DATE '2035-08-22', 'MONTH')
FROM DUAL;
Resultat:
01-AUG-35
Här är några fler:
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 formateras enligt datumformatet för den aktuella sessionen. Se Hur du kontrollerar datumformatet för den aktuella sessionen och hur du ändrar datumformatet för den aktuella sessionen för mer information om det.
Standard datumenhet
Standarddatumenheten är 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
Jämfört med ROUND()
TRUNC(date)
funktionen skiljer sig från ROUND(date)
fungera. ROUND()
funktion rundar av datumet uppåt i vissa fall och nedåt i andra. TRUNC()
funktion, å andra sidan, trunkerar helt enkelt datumet till den angivna enheten utan avrundning.
Här är en jämförelse för att visa denna skillnad:
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
Nullvärden
Om något av argumenten är null
, resultatet är 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 returnerar SQLcl och SQL*Plus ett blanksteg närhelst ett nollvärde inträffar som ett resultat av en SQL SELECT
påstående.
Du kan dock använda SET NULL
för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null
bör returneras.
Ogiltigt antal argument
Anropar TRUNC()
utan argument resulterar i ett fel:
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:
Och att anropa det med för många argument resulterar i ett fel:
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: