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: