sql >> Database teknologi >  >> RDS >> Oracle

TRUNC(dato) Funktion i Oracle

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:

  1. PostgreSQL Omvendt LIKE

  2. ROLLBACK TRUNCATE i SQL Server

  3. SQL-injektioner i ADOdb og generel hjemmesidesikkerhed

  4. Installation af pg -v 0.17.1