Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ROUND(data) Funkcja w Oracle

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:

2030-03-10 2030-03-18 2030-08-10 2030-08-10 _____________ ____________ _____________ ______________ 01-MAR-30 01-KWIETNIA-30 01-SIE-30 01-SIE-30

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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy możemy mieć wiele WITH AS w jednym sql - Oracle SQL?

  2. Instalowanie RAC dla bazy danych z plikami danych

  3. Reprezentowanie adresów IPv4/IPv6 w Oracle

  4. Wspólny użytkownik z uprawnieniami SYSBACKUP

  5. Indeksy Oracle i rodzaje indeksów w Oracle z przykładem