W tym poście staram się wyjaśnić wiele rzeczy na temat daty w Oracle, takich jak funkcje daty Oracle sql, format daty Oracle sql, porównanie daty Oracle sql, różnica dat Oracle w latach, różnica dat Oracle w dniach, różnica dat Oracle w miesiącach
Oracle dostarczyło typy dat i znaczników czasu do przechowywania informacji o dacie i godzinie w bazie danych Oracle.
Typ danych daty
DATA to typ danych Oracle, który wszyscy znamy, gdy myślimy o reprezentowaniu wartości daty i czasu. Ma możliwość przechowywania miesiąca, dnia,
roku, wieku, godzin, minut i sekund. Problem z typem danych DATE polega na jego ziarnistości podczas próby określenia odstępu czasu między dwoma zdarzeniami, gdy zdarzenia mają miejsce w odstępie jednej sekundy. Ten problem został rozwiązany za pomocą typu danych TIMESTAMP
sygnatura czasowa
Oracle rozszerzyło typ danych DATE i dało nam typ danych TIMESTAMP, który przechowuje wszystkie informacje, które przechowuje typ danych DATE, ale zawiera również ułamki sekund. Jeśli chcesz przekonwertować typ danych DATE na format typu danych TIMESTAMP, możesz użyć funkcji CAST
SQL> SELECT CAST(last_login_date AS TIMESTAMP) "Data" FROM użytkowników;Data------------------------------- ----------------------20-APR-16 01.55.14.000000 PM21-JUN-16 14.16.36.000000 AM21-JUL-16 10.16.36.000000 AM21-SEP- 16 11.16.36.000000 AM21-DEC-16 11.16.36.000000 AM
Aby uzyskać datę i godzinę systemową zwrócone w typie danych TIMESTAMP, możesz użyć funkcji SYSTIMESTAMP, takiej jak:
SQL> SELECT SYSTIMESTAMP FROM DUAL;SYSTIMESTAMP--------------------------------------- ------------------------------------01-września-19 01.02.17.158913 -04:00
Kilka ważnego punktu
1) Oba typy DATE i TIMESTAMP zawsze zawierają składnik daty i godziny. Dokładnie o północy jest godzina 00:00:00.
SELECT TO_CHAR(SYSDATE, 'MM/DD/RRRR GG:MI:SS AM') date_with_time,TRUNC(SYSDATE) dzisiaj,TO_CHAR(TRUNC(SYSDATE),'MM/DD/RRRR GG:MI:SS AM' ) date_with_time_midnightFROM podwójny 2 3 4;DATE_WITH_TIME DZIŚ DATE_WITH_TIME_MIDNIGHT---------------------- --------- --------- ------------ 27.10.2016 11:01:00 27-10-16 27.10.2016 12:00:00
2) Nigdy nie polegaj na niejawnej konwersji ciągów na daty lub dat na ciągi. Zawsze jawnie wykonuj konwersje za pomocą funkcji TO_CHAR, TO_DATE i TO_TIMESTAMP lub używaj literałów ANSI DATE lub TIMESTAMP.
3) Podczas porównywania dat lub znaczników czasu zawsze bierz pod uwagę wpływ składnika czasu. Jeśli chcesz zdyskontować składnik czasu z porównania, użyj TRUNC lub OKRĄGŁY funkcji, aby usunąć go z obu stron porównania.
wybierz * z fnd_table, gdzie trunc(data_tworzenia)4) Możesz wyświetlić wymagany format daty za pomocą nls_date_format na poziomie sesji
Zmień format daty w Oracle za pomocą nls_date_format
ALTER SESSION SET NLS_DATE_FORMAT ='YYYY MM DD';wybierz sysdate z podwójnego;ALTER SESSION SET NLS_DATE_FORMAT ='HH24:MI:SS';wybierz sysdate z podwójnego;zmień zestaw sesji nls_date_format ='dd-pon-yyyy hh24:mi:ss';wybierz sysdate z dual;5) Oto dobre podsumowanie formatów czasu, których możemy użyć
Element Opis Elementy formatu daty SCC lub CC wiek; S poprzedza datę BC z – RRRR lub SYYYY Rok; S poprzedza datę BC z – RRRR lub YY lub Y Ostatnie 3, 2 lub 1 cyfra roku Y,RRRR Rok z przecinkiem w tej pozycji IYYY, IYY, IY, ja 4, 3, 2 lub 1 cyfra roku na podstawie normy ISO ROK lub ROK Rok podany; S poprzedza datę BC z – BC lub AD Wskaźnik BC/AD BC lub AD Wskaźnik BC/AC z kropkami Pytanie Kwartał roku MM Miesiąc, wartość dwucyfrowa MIESIĄC Nazwa miesiąca uzupełniona spacjami do 9 znaków PON Nazwa miesiąca, trzyliterowy skrót RM Miesiąc z cyframi rzymskimi WW lub W Tydzień roku lub miesiąca DDD lub DD lub D Dzień roku, miesiąca lub tygodnia DZIEŃ Nazwa dnia uzupełniona spacjami do 9 znaków DY Nazwa dnia; Skrót składający się z 3 liter J Dzień Juliana; liczba dni od 31 grudnia 4713 pne Elementy formatu czasu przed południem lub po południu Wskaźnik południka Po południu lub po południu Wskaźnik południka z kropkami HH lub HH12 lub HH24 Godzina dnia lub godzina (1-12) lub godzina (0-23) MI Minuta (0-59) SS Drugi (0-59) SSSSS Sekundy po północy (0-86399) Przyrostki TH Numer porządkowy (np. DDTH dla 5TH) SP Przeliterowany numer (np. DDSP dla PIĘCIU) SPTH lub THSP Przeliterowane liczby porządkowe (np. DDSPTH dla FIFTH) Inne elementy formatowania / , . W wyniku jest odwzorowywana interpunkcja „z” Cytowany ciąg jest odtwarzany w wyniku funkcje daty Oracle
O typie danych Date and Timestamp dowiedzieliśmy się w poprzedniej sekcji. Zobaczymy teraz szczegółowo ważne funkcje daty wyroczni i sposób, w jaki możemy z nich korzystać
ADD_MONTHS
Funkcja daty Opis DODAJ_MIESIĄCE (data, n) Zwraca wartość daty po dodaniu „n” miesięcy do daty „x”. wybierz ADD_MONTHS ('16-wrze-81', 3) z dwóch------------------------------------------- 16-gru- 81ADD_MONTHS zawsze przesuwa datę o całe miesiące. Możesz podać wartość ułamkową parametru przesunięcie_miesiąca, ale ADD_MONTHS zawsze będzie zaokrąglać w dół do liczby całkowitej najbliższej zeru, jak pokazano w tych
przykładach:Więc
wybierz ADD_MONTHS ('28-LUTY-2005', 1.5) z podwójnego -------------------------------- ----------- 31-mar-2005Możemy również użyć wartości ujemnych
wybierz ADD_MONTHS ('28-LUTY-2005', -1) z podwójnego ------------------------------- 31 -sty-2005Ostatni_dzień
Funkcja daty Opis OSTATNI DZIEŃ (x) Służy do określenia liczby dni pozostałych w miesiącu od określonej daty „x”. Funkcja LAST_DAY zwraca datę ostatniego dnia miesiąca dla podanej daty. Ta funkcja jest przydatna, ponieważ liczba dni w miesiącu zmienia się w ciągu roku.
wybierz LAST_DAY („01-16 czerwca”) z podwójnego----------------------------------- -------------------30-czerwiec-2016Następny_dzień
Funkcja daty Opis NEXT_DAY (x, week_day) Zwraca następną datę dnia „week_day” w dniu lub po dacie wystąpienia „x”. NEXT_DAY zwraca datę pierwszego dnia tygodnia określonego przez dzień, który jest późniejszy niż data. Zwracanym typem jest zawsze DATE, bez względu na typ danych date. Dzień argumentu musi być dniem tygodnia w języku daty sesji, albo pełnym imieniem, albo skrótem
wybierz NEXT_DAY („01-cze-08”, „środa”) z dwóch ------------------------------ -------------04-CZE-08
MONTHS_BETWEEN
Funkcja daty | Opis |
MONTHS_BETWEEN (x1, x2) | Zwraca liczbę miesięcy między datami x1 i x2. |
Funkcja MONTHS_BETWEEN oblicza liczbę miesięcy między dwiema datami i zwraca tę różnicę jako liczbę
Zasady obliczania to
1)Jeśli data1 przypada po dacie2, to MONTHS_BETWEEN zwraca liczbę dodatnią.
2) Jeśli data1 przypada przed datą2, to MONTHS_BETWEEN zwraca liczbę ujemną.
3) Jeśli data1 i data2 przypadają na ostatni dzień odpowiednich miesięcy, to MONTHS_BETWEEN zwraca liczbę całkowitą (bez części ułamkowej).
4)Jeśli data1 i data2 są w różnych miesiącach i co najmniej jedna z dat nie jest ostatnim dniem w miesiącu, MONTHS_BETWEEN zwraca liczba ułamkowa. Składnik ułamkowy jest obliczany na podstawie 31 dni i uwzględnia również wszelkie różnice w składniku czasowym daty1 i daty2.
Przykłady
wybierz MONTHS_BETWEEN ('29-LUTY-2016', '31-MAR-20') z podwójnego --------------- -------------------------------------------------- -----1Wybierz MONTHS_BETWEEN ('31 MAR-1995', '28-LUTY-1994') z dwóch ------------------------ -------------------------------------------------- -----13wybierz MIESIĄCE_POMIĘDZY („31 stycznia 2006 r.”, „10 marca 2006 r.”) z dwóch ------------------------ -------------------------------------------------- ---1.3225806SELECT MONTHS_BETWEEN(TO_DATE('02-02-1995','MM-DD-RRRR'),TO_DATE('01-01-1995','MM-DD-RRRR') ) "Miesiące"FROM DUAL; Miesiące ---------- 1.03225806
Ważny punkt do zapamiętania
MONTHS_BETWEEN oblicza składnik ułamkowy liczby miesięcy, zakładając, że
każdy miesiąc ma 31 dni. Dlatego każdy dodatkowy dzień w całym miesiącu liczy się dla 1/31 miesiąca i:
1 podzielony przez 31 =.032258065
Okrągły
Funkcja daty | Opis |
ROUND (x, format_daty) | Zwraca datę „x” zaokrągloną do najbliższego stulecia, roku, miesiąca, dnia, godziny, minuty lub sekundy zgodnie z „formatem_daty”. |
Funkcja ZAOKR zaokrągla wartość daty do najbliższej daty określonej przez maskę formatu. Działa podobnie jak standardowa funkcja numeryczna ZAOKR, która zaokrągla liczbę do najbliższej liczby o określonej precyzji, z tym wyjątkiem, że działa z datami
Przykłady
Wybierz RUNDA (DO_DATA ('12-MAR-2016'), 'MIESIĄC') z podwójnej;01-MAR-2016Wybierz RUNDA (DO_DATA ('17-MAR-2016'), 'MIESIĄC') z podwójnej;01 -APR-2016 wybierz ROUND (DO_DATE ('01-MAR-2007'), 'RRRR') z podwójnego;01-STY-2007 wybierz ROUND (TO_DATE ('01-SEP-2007'), 'YEAR') z podwójnego;01 -styczeń-2008
Obcinanie
Funkcja daty | Opis |
TRUNC (x, format_daty) | Zwraca datę „x” mniejszą lub równą najbliższemu stuleciu, rokowi, miesiącowi, dacie, godzinie, minucie lub sekundzie określonej przez „format_daty”. |
Przykłady
Wybierz TRUNC (DO_DATE ('12-MAR-2016'), 'MIESIĄC') z podwójnego; 01-MAR-2016 Wybierz TRUNC (DO_DATE ('17-MAR-2016'), 'MIESIĄC') z podwójnego; 01-MAR-2016 wybierz TRUNC (DO_DATE ('01-MAR-2007'), 'RRRR') z podwójnego; 01-STY-2007 wybierz TRUNC (DO_DATE ('01-SEP-2007'), 'YEAR') z podwójnego;01-styczeń-2007
Arytmetyka z datą Oracle
Możemy wykonać wiele operacji arytmetycznych na typie danych Oracle data. Możemy dodać lub odjąć liczbę do lub od daty dla wynikowej wartości daty. możemy odjąć dwie daty, aby znaleźć liczbę dni między tymi datami. dodajemy godziny do tej pory, dzieląc liczbę godzin przez 24.
Przykłady dodawania i odejmowania
SQL> wybierz sysdate, sysdate +1/24, sysdate +1/1440, sysdate + 1/86400 z dual; SYSDATE SYSDATE + 1/24 SYSDATE + 1/1440 SYSDATE + 1/86400------ -------------- -------------------- ---------------- ---- --------------------01-lip-2016 06:32:12 01-lip-2016 07:32:12 01-lip-2016 06 :33:12 01-lip-2016 06:32:13
Inne sposoby, w jakie możemy z niego korzystać, to
Opis | Wyrażenie daty |
Teraz | Sysdata |
Jutro/następny dzień | Sysdate +1 |
Siedem dni temu | SYSDATE -7 |
Za godzinę | SYSDATE + 1/24 |
Trzy godziny od teraz | SYSDATE + 24.03 lub SYSDATE + 1/8 |
Za pół godziny od teraz | SYSDATE + 1/48 |
10 minut od teraz | SYSDATE + 10/1440 |
30 sekund od teraz | SYSDATE + 30/86400 |
Operacja arytmetyczna na różnicy dat w celu znalezienia liczby dni między nimi
Możemy odjąć dwie daty, aby znaleźć różnicę dni między datami
Jeśli część czasu jest taka sama, to zawsze będzie to liczba całkowita.SELECT TO_DATE('25-MAR-2016 11:00:00 AM', 'DD-MON-YYYY HH:MI:SS AM')- TO_DATE(' 19 MARCA 2016 11:00:00 AM', 'DD-MON-RRRR HH:MI:SS AM') diff_in_daysFROM dual;DIFF_IN_DAYS---------- 6Jeśli część czasu nie jest taka sama, to zawsze będzie miał składniki ułamkoweSELECT TO_DATE('25-MAR-2016 10:00:00', 'RRRRMMDD HH:MI:SS AM')- TO_DATE('19-MAR-2016 11:00:00 AM', 'RRRRMMDD GG:MI:SS AM') diff_in_daysFROM dual;DIFF_IN_DAYS----------5.95833333SQL> SELECT TO_DATE('25-MAR-2016 11:00:00 AM', 'RRRRMMDD HH:MI:SS AM')- TO_DATE('19-MAR-2016 10:00:00', 'RRRRMMDD HH:MI:SS AM') diff_in_daysFROM dual;DIFF_IN_DAYS----------6.04166666
Za pomocą zapytania możemy znaleźć różnicę dat wyroczni w miesiącach
SELECT MONTHS_BETWEEN(TO_DATE('02-02-1995','MM-DD-RRRR'),TO_DATE('01-01-1995','MM-DD-RRRR') ) "Różne_w_miesiącach", (TO_DATE ('02-02-1995','MM-DD-RRRR')-TO_DATE('01-01-1995','MM-DD-RRRR') diff_in_daysFROM DUAL;Diff_in_Months diff_in_days--------- -------------------------------1.03225806 32
Możemy również znaleźć różnicę dat wyroczni w latach za pomocą zapytania
SELECT (TO_DATE('20130525', 'RRRRMMDD') - TO_DATE('20100101', 'RRRRMMDD')) diff_in_dni , MONTHS_BETWEEN(TO_DATE('20130525', 'RRRRMMDD'), TO_DATE('20100101', 'Y ')) Diff_in_months,TRUNC(MONTHS_BETWEEN(TO_DATE('20130525', 'YYYYMMDD'), TO_DATE('20100101', 'YYYYMMDD')))) Diff_in_months_no_fraction,TRUNC(TRUNC(MONTHS_BETWEEN(TO'YYMM('2013)) , TO_DATE('20100101', 'RRRRMMDD'))) / 12) Diff_in_years_no_fraction,MOD(TRUNC(MONTHS_BETWEEN(TO_DATE('20130525', 'RRRRMMDD'), TO_DATE('20100101', 'RRRRMMDD'))), 12) Różnica_w_latach_frakcja_w_miesięcachOD dual;DIFF_IN_DAYS DIFF_IN_Miesiąc DIFF_IN_MIESIĄC_BRAK FRAKCJI DIFF_W_ROKU_BRAK FRAKCJI DIFF_IN_LAT_FRACTION_IN_MIESIĄC _______________________________________________________________________ 12 40
Mam nadzieję, że podoba Ci się post o typie danych Oracle. Próbowałem wyjaśnić różne rzeczy, takie jak funkcje dat Oracle, format daty Oracle sql, porównanie dat Oracle sql, różnica dat Oracle w latach, różnica dat Oracle w dniach, różnica dat Oracle w miesiącach. Nie jest to kompletny przewodnik, ale starałem się przedstawić wiele przydatnych informacji dla programisty Oracle sqlPowiązane artykuły
jak pisać zapytania sql
Samouczek Oracle sql :Podstawowa instrukcja Sql
Samouczek Oracle sql :Ograniczanie zestawu danych
Funkcje pojedynczego wiersza w sql
Przetwarzanie dekodowania Oracle sql
Pobierz Programista Oracle SQL
https://docs.oracle.com/cd/B28359_01/olap.111/b28126/dml_commands_1029.htm#OLADM780