PostgreSQL Generate_Series, aby utworzyć serię dat

PostgreSQL Generate_Series, aby utworzyć serię dat

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:

  • [[[początek]: Jest to punkt wyjścia do generowania serii.
  • [[[zatrzymywać się]: To pokazuje punkt, w którym seria się zatrzyma.
  • [[[interwał]: Trzecia, ale opcjonalna wartość oznacza, jak bardzo seria będzie się zwiększyć na każdym etapie. Wartość domyślna dla przedziałów wynosi 1.

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.