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

ROUND(date) Funktion in Oracle

In Oracle das ROUND(date) Die Funktion gibt ein auf eine angegebene Datumseinheit gerundetes Datum zurück.

Standardmäßig wird das Datum auf den nächsten Tag gerundet, aber Sie können ein optionales Argument angeben, das eine alternative zu verwendende Einheit angibt.

Oracle hat auch eine ROUND(number) Syntax, die auf Zahl verwendet wird. In diesem Artikel geht es ausschließlich um das ROUND(date) Syntax, die auf dem Datum verwendet wird.

Syntax

Die Syntax lautet wie folgt:

ROUND(date [, fmt ])

Wobei date muss zu einem DATE aufgelöst werden Wert und fmt ist ein optionales Formatmodell, das die zu rundende Einheit date angibt zu. Das Formatmodell kann eines der unterstützten Formatmodelle für TRUNC(date) sein und ROUND(date) Funktionen.

Beispiel

Hier ist ein Beispiel:

SELECT 
    ROUND(TO_DATE('2030-12-31 12:30:45', 'YYYY-MM-DD HH24:MI:SS'))
FROM DUAL;

Ergebnis:

01-JAN-31

In diesem Fall war der Zeitteil nach Mittag, und das Datum wurde auf den nächsten Tag gerundet (der zufällig auch der nächste Monat und das nächste Jahr war).

Es wurde auf den Tag gerundet, da dies die Standardeinheit ist, auf die gerundet wird, und wir nicht ausdrücklich eine andere Einheit angegeben haben.

Folgendes passiert, wenn ich den Zeitabschnitt auf vor Mittag reduziere:

SELECT 
    ROUND(TO_DATE('2030-12-31 11:59:59', 'YYYY-MM-DD HH24:MI:SS'))
FROM DUAL;

Ergebnis:

31-DEC-30

Diesmal wird auf denselben Tag gerundet.

Beachten Sie, dass das zurückgegebene Datumsformat vom Wert Ihres NLS_DATE_FORMAT abhängt -Parameter (hier erfahren Sie, wie Sie Datumswerte für Ihre Sitzung formatieren, falls Sie interessiert sind).

Auf eine bestimmte Datumseinheit runden

Hier ist ein Beispiel für die Angabe einer anderen Datumseinheit, auf die das Datum gerundet werden soll:

SELECT 
    ROUND(DATE '2030-12-31', 'MONTH')
FROM DUAL;

Ergebnis:

01-JAN-31

Hier ist es noch einmal, aber mit verschiedenen anderen Daten:

SELECT 
    ROUND(DATE '2030-03-10', 'MONTH') AS "2030-03-10",
    ROUND(DATE '2030-03-18', 'MONTH') AS "2030-03-18",
    ROUND(DATE '2030-08-10', 'MONTH') AS "2030-08-10",
    ROUND(DATE '2030-08-10', 'MONTH') AS "2030-08-10"
FROM DUAL;

Ergebnis:

   2030-03-10    2030-03-18    2030-08-10    2030-08-10 
_____________ _____________ _____________ _____________ 
01-MAR-30     01-APR-30     01-AUG-30     01-AUG-30    

Und hier ist es mit demselben Datum, aber verschiedenen Formatelementen:

SELECT 
    ROUND(DATE '2030-10-31', 'DAY') AS "Day",
    ROUND(DATE '2030-10-31', 'WW') AS "Week of year",
    ROUND(DATE '2030-10-31', 'MONTH') AS "Month",
    ROUND(DATE '2030-10-31', 'YEAR') AS "Year"
FROM DUAL;

Ergebnis:

         Day    Week of year        Month         Year 
____________ _______________ ____________ ____________ 
03-NOV-30    29-OCT-30       01-NOV-30    01-JAN-31    

Dies zeigt, wie viel Variation wir je nach angegebener Datumseinheit haben können.

Negatives Datum

Folgendes passiert, wenn wir sie in negative Daten umwandeln:

SELECT 
    ROUND(DATE '-2030-10-31', 'DAY') AS "Day",
    ROUND(DATE '-2030-10-31', 'WW') AS "Week of year",
    ROUND(DATE '-2030-10-31', 'MONTH') AS "Month",
    ROUND(DATE '-2030-10-31', 'YEAR') AS "Year"
FROM DUAL;

Ergebnis:

         Day    Week of year        Month         Year 
____________ _______________ ____________ ____________ 
28-OCT-30    29-OCT-30       01-NOV-30    01-JAN-29    

Natürlich werden sich die Ergebnisse ändern, wenn sich das Datum ändert.

Rundung von Nicht-Datumsargumenten

Folgendes passiert, wenn wir versuchen, ein Nicht-Datumsargument zu runden, das nicht in ein DATE konvertiert werden kann Datentyp:

SELECT ROUND('Bruce')
FROM DUAL;

Ergebnis:

Error starting at line : 1 in command -
SELECT ROUND('Bruce')
FROM DUAL
Error report -
ORA-01722: invalid number

Wir können jedoch Zahlen runden – es gibt eine numerische Version dieser Funktion, mit der wir Zahlen runden können.

Nullwerte

Versuch, null zu runden gibt null zurück , und versuchen, ein Datum um null zu runden ergibt auch null :

SET NULL 'null';

SELECT 
    ROUND(null),
    ROUND(null, 'MONTH'),    
    ROUND(DATE '2030-12-20', null)
FROM DUAL;

Ergebnis:

   ROUND(NULL)    ROUND(NULL,'MONTH')    ROUND(DATE'2030-12-20',NULL) 
______________ ______________________ _______________________________ 
          null                   null null                            

Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn null tritt als Ergebnis eines SQL SELECT auf 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.

Falsche Argumentanzahl

Aufruf von ROUND() ohne Übergabe von Argumenten gibt einen Fehler zurück:

SELECT ROUND()
FROM DUAL;

Ergebnis:

Error starting at line : 1 in command -
SELECT ROUND()
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 das Übergeben der falschen Anzahl von Argumenten führt zu einem Fehler:

SELECT ROUND(DATE '2030-12-20', 'day', 'month')
FROM DUAL;

Ergebnis:

Error starting at line : 1 in command -
SELECT ROUND(DATE '2030-12-20', 'day', 'month')
FROM DUAL
Error at Command Line : 1 Column : 40
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action: