Oracle
 sql >> Datenbank >  >> RDS >> Oracle

TRUNC(date) Funktion in Oracle

In der Oracle-Datenbank das TRUNC(date) Die Funktion gibt den angegebenen Datumswert mit dem Zeitabschnitt des Tages zurück, der auf die im angegebenen Formatmodell bereitgestellte Einheit gekürzt ist.

Oracle hat auch einen TRUNC(number) Syntax, die für Zahlen verwendet wird. In diesem Artikel geht es ausschließlich um TRUNC(date) Syntax, die für Datumsangaben verwendet wird.

Syntax

Die Syntax lautet wie folgt:

TRUNC(date [, fmt ])

Wobei date ist das zu kürzende Datum und fmt ist ein optionales Formatmodell, das eine Einheit angibt, für die der Wert abgeschnitten werden soll. Das Formatmodell kann eines der unterstützten Formatmodelle für TRUNC(date) sein und ROUND(date) Funktionen.

Die Funktion arbeitet nach den Regeln des gregorianischen Kalenders (sie reagiert nicht auf den Wert von NLS_CALENDAR Parameter).

Beispiel

Hier ist ein Beispiel:

SELECT TRUNC(DATE '2035-08-22', 'MONTH')
FROM DUAL;

Ergebnis:

01-AUG-35

Hier sind noch einige:

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;

Ergebnis:

           D           DD        Month         Year           CC 
____________ ____________ ____________ ____________ ____________ 
19-AUG-35    22-AUG-35    01-AUG-35    01-JAN-35    01-JAN-01   

Das Ergebnis wird gemäß dem Datumsformat für die aktuelle Sitzung formatiert. Weitere Informationen dazu finden Sie unter So überprüfen Sie das Datumsformat der aktuellen Sitzung und So ändern Sie das Datumsformat für die aktuelle Sitzung.

Standarddatumseinheit

Die Standarddatumseinheit ist DD :

SELECT 
    TRUNC(DATE '2035-08-22') AS "Default",
    TRUNC(DATE '2035-08-22', 'DD') AS "DD"
FROM DUAL;

Ergebnis:

     Default           DD 
____________ ____________ 
22-AUG-35    22-AUG-35   

Im Vergleich zu ROUND()

Der TRUNC(date) Funktion unterscheidet sich von ROUND(date) Funktion. Das ROUND() Die Funktion rundet das Datum in einigen Fällen auf und in anderen ab. Der TRUNC() Die Funktion hingegen kürzt das Datum ohne Rundung einfach auf die angegebene Einheit.

Hier ist ein Vergleich, um diesen Unterschied zu demonstrieren:

SELECT 
    TRUNC(DATE '2030-12-31', 'MONTH') AS "Trunc",
    ROUND(DATE '2030-12-31', 'MONTH') AS "Round"
FROM DUAL;

Ergebnis:

       Trunc        Round 
____________ ____________ 
01-DEC-30    01-JAN-31   

Nullwerte

Wenn eines der Argumente null ist , ist das Ergebnis null :

SET NULL 'null';
SELECT 
    TRUNC(null, 'D'),
    TRUNC(date'2020-12-30', null)
FROM DUAL;

Ergebnis:

   TRUNC(NULL,'D')    TRUNC(DATE'2020-12-30',NULL) 
__________________ _______________________________ 
              null null                           

Standardmäßig geben SQLcl und SQL*Plus immer dann ein Leerzeichen zurück, wenn als Ergebnis eines SQL SELECT ein Nullwert auftritt Erklärung.

Sie können jedoch SET NULL verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null zurückgegeben werden soll.

Ungültige Argumentanzahl

Aufruf von TRUNC() ohne Argument führt zu einem Fehler:

SELECT TRUNC()
FROM DUAL;

Ergebnis:

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:

Und der Aufruf mit zu vielen Argumenten führt zu einem Fehler:

SELECT TRUNC(1, 2, 3)
FROM DUAL;

Ergebnis:

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: