sql >> Databasteknik >  >> RDS >> Oracle

TRUNC(date) Funktion i Oracle

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:

  1. Anpassad ordning i Oracle SQL

  2. Välj Oracle för uppdateringsbeteende

  3. Django-formulär för att fråga databas (modeller)

  4. clojure.java.jdbc lat fråga