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

Jak pracować z funkcjami daty w Oracle sql

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- 81

ADD_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-2005

Możemy również użyć wartości ujemnych

wybierz ADD_MONTHS ('28-LUTY-2005', -1)                z podwójnego ------------------------------- 31 -sty-2005

Ostatni_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-2016

Nastę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 sql

Powią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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Importuj plik CSV do tabeli Oracle za pomocą procedury przechowywanej

  2. Tablica w klauzuli IN() oracle PLSQL

  3. Włączanie SSL lub TLS w Oracle Apps R12

  4. Zestaw testowy konfiguracji AOL/J

  5. Typ daty bez czasu w Oracle