W Oracle ROUND(date) funkcja zwraca datę zaokrągloną do określonej jednostki daty.
Domyślnie zaokrągla datę do najbliższego dnia, ale możesz podać opcjonalny argument, który określa alternatywną jednostkę do użycia.
Oracle ma również ROUND(number) składnia, która jest używana w numerze. Ten artykuł dotyczy wyłącznie ROUND(date) składnia, która jest używana w dacie.
Składnia
Składnia wygląda tak:
ROUND(date [, fmt ])
Gdzie date musi zostać rozwiązany na DATE wartość i fmt to opcjonalny model formatu, który określa jednostkę do zaokrąglenia date do. Modelem formatu może być dowolny z obsługiwanych modeli formatu dla TRUNC(date) i ROUND(date) funkcje.
Przykład
Oto przykład:
SELECT
ROUND(TO_DATE('2030-12-31 12:30:45', 'YYYY-MM-DD HH24:MI:SS'))
FROM DUAL; Wynik:
01-sty-31
W tym przypadku część czasu minęła po południu, a data została zaokrąglona do następnego dnia (który również był kolejnym miesiącem i rokiem).
Został zaokrąglony do dnia, ponieważ jest to domyślna jednostka, do której należy zaokrąglać, i nie określiliśmy wyraźnie innej jednostki.
Oto, co się dzieje, gdy skrócę czas do południa:
SELECT
ROUND(TO_DATE('2030-12-31 11:59:59', 'YYYY-MM-DD HH24:MI:SS'))
FROM DUAL; Wynik:
31 grudnia-30
Tym razem jest zaokrąglony do tego samego dnia.
Pamiętaj, że zwracany format daty zależy od wartości Twojego NLS_DATE_FORMAT parametr (oto jak sformatować wartości dat dla Twojej sesji, jeśli jesteś zainteresowany).
Zaokrąglaj do określonej jednostki daty
Oto przykład określenia innej jednostki daty w celu zaokrąglenia daty do:
SELECT
ROUND(DATE '2030-12-31', 'MONTH')
FROM DUAL; Wynik:
01-sty-31
Oto znowu, ale z różnymi innymi datami:
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; Wynik:
A tutaj jest z tą samą datą, ale różnymi elementami formatu:
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; Wynik:
Dzień Tydzień roku Miesiąc Rok ____________ _______________ ____________ ____________ 03-NOV-30 29-OCT-30 01-NOV-30 01-STY-31
Pokazuje to, jak dużą zmienność możemy mieć, w zależności od określonej jednostki daty.
Data negatywna
Oto, co się dzieje, gdy przekształcamy je w daty ujemne:
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; Wynik:
Dzień Tydzień roku Miesiąc Rok ____________ _______________ ____________ ____________ 28-OCT-30 29-OCT-30 01-NOV-30 01-STY-29
Oczywiście wyniki będą się zmieniać wraz ze zmianą daty.
Zaokrąglanie argumentów bez daty
Oto, co się dzieje, gdy próbujemy zaokrąglić argument bez daty, którego nie można przekonwertować na DATE typ danych:
SELECT ROUND('Bruce')
FROM DUAL; Wynik:
Błąd zaczynający się od wiersza:1 w poleceniu -SELECT ROUND('Bruce')FROM DUALError report -ORA-01722:nieprawidłowy numer Możemy jednak zaokrąglać liczby – istnieje numeryczna wersja tej funkcji, która pozwala nam zaokrąglać liczby.
Wartości puste
Próbuję zaokrąglić null zwraca null i próba zaokrąglenia daty przez null powoduje również null :
SET NULL 'null';
SELECT
ROUND(null),
ROUND(null, 'MONTH'),
ROUND(DATE '2030-12-20', null)
FROM DUAL; Wynik:
ROUND(NULL) ROUND(NULL,'MIESIĄC') ROUND(DATA'2030-12-20',NULL) ______________ ________ ________________________________ null null null
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null występuje w wyniku polecenia SQL SELECT oświadczenie.
Możesz jednak użyć SET NULL aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null należy zwrócić.
Nieprawidłowa liczba argumentów
Wywołanie ROUND() bez przekazywania żadnych argumentów zwraca błąd:
SELECT ROUND()
FROM DUAL; Wynik:
Błąd zaczynający się od wiersza:1 w poleceniu -SELECT ROUND()FROM DUALError w wierszu polecenia:1 Kolumna:8Raport o błędzie -SQL Błąd:ORA-00938:za mało argumentów dla funkcji00938. 00000 - "za mało argumentów dla funkcji"*Przyczyna:*Działanie:
A przekazanie niewłaściwej liczby argumentów skutkuje błędem:
SELECT ROUND(DATE '2030-12-20', 'day', 'month')
FROM DUAL; Wynik:
Błąd zaczynający się od wiersza:1 w poleceniu -SELECT ROUND(DATE '2030-12-20', 'dzień', 'miesiąc')FROM DUALEBłąd w wierszu polecenia:1 Kolumna:40Raport o błędach -Błąd SQL:ORA-00939 :za dużo argumentów dla function00939. 00000 - "za dużo argumentów dla funkcji"*Przyczyna:*Działanie: