sql >> Database >  >> RDS >> Oracle

TRUNC(datum) Functie in Oracle

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:

  1. Groeperen op twee velden gebruiken en tellen in SQL

  2. Verschil tussen sys.parameters, sys.system_parameters en sys.all_parameters in SQL Server

  3. JSON_PRETTY() – Formatteer JSON-documenten voor betere leesbaarheid in MySQL

  4. ADO.net SqlTransaction verbetert de prestaties