Musisz zapoznać się z wprowadzaniem danych w dowolnym systemie zarządzania bazą danych. Podczas wprowadzania danych możesz nie mieć czasu i musisz zignorować luki w danych lub chcesz spójną serię rekordów. W tej sytuacji PostgreSQL Generate_Series ma zastosowanie do osiągnięcia wymaganego celu. Jak wskazuje nazwa, mechanizm tej funkcji zawiera 2 lub 3 wejścia. I.mi., Generate_series umożliwia generowanie sekwencji rekordów z punktem wyjścia, punktu zakończenia i wartości przyrostu (opcjonalnie). Działa głównie na dwóch typach danych. I.mi., Liczby całkowite i znaczniki czasu. Aby utworzyć sekwencję dat, funkcja Generate_Series jest wykorzystywana na różne sposoby.
Składnia:
>> generate_series ([start], [stop], [opcjonalny krok/interwał]);
Opis składni zapytania jest następujący:
Zróbmy pomysł, w jaki sposób może wykonać funkcja Generate_Series (). Poniżej znajdują się podstawowe przykłady. Aby zrozumieć koncepcję tej funkcji, musimy zainstalować i otworzyć powłokę linii poleceń PostgreSQL (PSQL).
Po udanej konfiguracji i dostarczaniu LocalHost, nazwy bazy danych, numeru portu i hasła, możemy przejść do dowolnego zapytania na PSQL.
Przykład 01: Generuj_series za pomocą operatora daty i liczby całkowitych
Poniższe zapytanie zawiera wbudowaną funkcję „daty”, aby pobrać bieżącą datę. Podczas gdy „A” jest dostarczany. Funkcją tego operatora jest dodanie tej konkretnej liczby (przedziału) w ciągu dnia daty. Innymi słowy, z określonymi odstępami, dni są przesunięte i pokazane w dniu. W wyjściu interwał „9” będzie dodawany każdego dnia, ja.mi., 9+9 = 18, a następnie 27 i tak dalej, aż do osiągnięcia suma 40.
>> Wybierz current_date + s.a As Dates z Generate_Series (0,40,9) jako S (a);
Przykład 02: Korzystanie z bieżącej daty do wygenerowania serii dat
Aby wygenerować serię dat z pomocą bieżącej daty, wykorzystujemy funkcję now (), która automatycznie pobiera bieżącą datę z systemu. Możesz zobaczyć odpowiednie dane wyjściowe pokazuje datę do 4 dni. Dzieje się tak, ponieważ ograniczyliśmy wykonanie, dodając 4 dni do bieżącej daty. Jak zapewniliśmy czas przedziału do 1 dnia, więc każda data zostanie zwiększona z 1 dodaniem
>> Wybierz * z Generate_Series (teraz (), teraz () + „4 dni”, „1 dzień”);
Przykład 03: Generowanie serii dat za pomocą znaczników czasu
Znacznik czasu godzin: Ta funkcja używa również danych znaczników czasu. Znacznik czasu jest w zasadzie sekwencją znaków, które zapewniają godzinę i datę powiązanego dnia. Odpowiednia funkcja ułatwia użytkownik w dostarczaniu dat między obiema datami, których używaliśmy do przewidywania w zapytaniu. Otrzymuje się listę znaczników czasu od 7 do 11 z jednym znacznikiem czasu co 5 godzin.
>> Wybierz * z Generate_Series („2021-3-7 00:00” :: Timestamp, „2021-3-11 12:00”, „5 godzin”);
Zapytanie, jak wspomniano powyżej, służy również do dodawania minut i sekund z godzinami, aby uzyskać lepszy znacznik czasu między dniami odpowiedniego znacznika czasu.
Znacznik czasu: W przekroczonym przykładzie widzieliśmy, że znacznik czasu jest używany do pokazania dat między dwiema odpowiednimi datami, które dostarczyliśmy z zmianami w godzinach zwiększanych o 5. W obecnym przykładzie zobaczymy znacznik czasu za dni. Dni są zwiększane o 2, ponieważ zainicjowaliśmy 2-dniową szczelinę w konkretnym wyjściu.
>> Wybierz * z Generate_Series („2021-03-01” :: timestamptz, „2021-03-19” :: timestamptz, „2 dni”);
Przykład 04: Generowanie określonych dat miesiąca za pomocą date_trunc
Pierwszy dzień miesiąca
Jeśli chcemy wygenerować pierwszą datę bieżącego miesiąca.Odrębną funkcją tutaj to date_trunc, która ściska datę podania precyzji.I.mi. Teraz()
>> Wybierz date_trunc („miesiąc”, teraz ());
Ostatni dzień miesiąca
To samo podejście date_trunc wygeneruje ostatni dzień miesiąca.
>> Wybierz date_trunc („miesiąc”, teraz ()) + „1 miesiąc” :: interwał - „1 dzień” :: interwał jako end_of_month;
W połowie miesiąca
W połowie miesiąca uzyskuje się poprzez zmianę poprzedniego zapytania. Wykorzystamy średnią funkcję, aby uzyskać odpowiedni cel. Lub odejmujemy 17 dni od ostatniego.
>> Wybierz date_trunc („miesiąc”, teraz ()) + „1 miesiąc” :: interwał - '17 dni ':: interwał jako mid_of_month;
Przykład 05: Generowanie dat za pomocą danych związanych z kalendarzem
Oto przykład używania danych kalendarzowych. Poznamy rok skokowy, ja.mi., Łącznie dni w lutym.„T” oznacza prawdziwe środki rok to rok skokowy, a dla „F” jest to fałszywe „dow” reprezentuje dni tygodnia. Kolumna „luty” zawiera łączną liczbę dni w miesiącu. „Dzień” oznacza pierwszy dzień Jana każdego roku. Według badań, tygodnie ISO zaczynają się od poniedziałku, a pierwszy tydzień roku zawiera 5 stycznia roku.
>> Wybierz Datę :: Data, wyciąg („ISODOW” od daty) jako Dow, to_char (data, „dy”) jako dzień, wyciąg („ISO ROK” od daty) jako „rok ISO”, wyciąg („tydzień” Od daty) jako tydzień, wyciąg („Day” (data + interwał ”2 miesiące - 1 dzień ')) jako luty, wyciąg („ rok ”z daty) jako rok, wyciąg („ dzień ”z (data + interwał” 2 miesiąc-1 dzień ')) = 29AS LEAP z Generate_Series (data „2010-01-01”, data „2020-03-01”, przedział „1 rok”) jako t (data);
ISODOW to standardowy dzień „ISO”. Zapytanie zostanie wykonane w latach 2010–2020 podczas manipulowania każdym miesiącem, tygodniem i dniem roku.
Przykład 06: Generowanie serii określonych dat i liczby dni w tygodniu
W tym zapytaniu uzyskamy daty i liczby dzienne, filtrując dni w tygodniu. Będziemy rozważyć liczbę dni tygodnia. Na przykład, zaczynając od 0 do 6. Gdzie 0 jest niedziela i 6 to sobota. W tym zapytaniu zobaczysz, że zastosowaliśmy warunek, aby przynieść daty i liczby dzienne, które nie są w 2 i 5. Na przykład 20 lutego była to sobota, więc liczba, która się pojawiła.
>> z dniami, jak (wybierz DD, wyodrębnij (Dow z DD) DW z generowania_series („2021-02-20” :: Data, '2021-03-05' :: Data, „1 dzień” :: interwał) DD ) Wybierz *z dni, w których DW nie w (2,5);
Wniosek
Artykuł, jak wspomniano powyżej, obejmuje większość podstawowych funkcji związanych z generowaniem serii w celu utworzenia serii dat. Szczegółowe przykłady omówione w każdym aspekcie są tak znaczące, że eskalują wiedzę twojego artykułu.