Bármely adatbázis-kezelő rendszerben ismernie kell az adatbevitelt. Az adatok bevitele közben előfordulhat, hogy nincs ideje, és figyelmen kívül kell hagynia az adatok hiányosságait, vagy konzisztens rekordok sorozatára van szüksége. Ebben a helyzetben a PostgreSQL generál_sorozat alkalmazható a kívánt cél elérésére. Ahogy a neve is jelzi, ennek a funkciónak a mechanizmusa 2 vagy 3 bemenetet tartalmaz. én.e., A generator_sorozat lehetővé teszi rekordok sorozatának létrehozását kezdőponttal, végponttal és növekményes értékkel (opcionális). Főleg két adattípuson működik. én.e., Egész számok és időbélyegek. Dátumsorozat létrehozásához a generátor_sorozat függvényt különböző módon használják.
Szintaxis:
>> Készítsen_sorozatot ([kezdet], [leállítás], [opcionális lépés / intervallum]);A lekérdezési szintaxis leírása a következő:
- [Rajt]: Ez egy sorozat létrehozásának kiindulópontja.
- [álljon meg]: Ez azt a pontot mutatja, ahol a sorozat leáll.
- [intervallum]: A harmadik, de opcionális érték azt jelenti, hogy a sorozat mennyit fog növekedni az egyes lépésekben. Az intervallumok alapértelmezett értéke 1.
Vegyünk egy ötletet arról, hogyan teljesíthet a generator_series () függvény. Az alábbiakban bemutatunk néhány elemi példát. A funkció fogalmának megértéséhez telepítenünk kell és meg kell nyitnunk a postgreSQL parancssori héjat (psql).
Sikeres konfigurálás után és a localhost, az adatbázis név, a portszám és a jelszó megadása mellett bármelyik lekérdezést végigvihetjük a psql-n.
01. példa: Készítsen_sorozatot a DATE plusz egész operátor használatával
A következő lekérdezés tartalmaz egy „DATE” beépített függvényt az aktuális dátum lekérésére. Mivel az „a” az üzemeltető. Ennek a szolgáltatónak az a feladata, hogy az adott számot (intervallumot) hozzáadja a dátum napi részéhez. Vagy más szavakkal, meghatározott időközönként a napok eltolódnak és megjelennek a dátumban. A kimenetben minden nap hozzáadódik a „9” intervallum, azaz.e., 9 + 9 = 18, majd 27 és így tovább, amíg el nem éri a 40 összegét.
>> SELECT current_DATE + s.egy AS a FROM Generate_series (0,40,9) AS s (a) dátumától származik;02. példa: Az aktuális dátum felhasználása a dátumsorok előállításához
A dátumsorok előállításához az aktuális dátum segítségével a now () függvényt használjuk, amely automatikusan kiveszi az aktuális dátumot a rendszerből. Láthatja, hogy a megfelelő kimenet legfeljebb 4 napos dátumot mutat. Ennek oka az, hogy korlátoztuk a végrehajtást azzal, hogy 4 napot adtunk az aktuális dátumhoz. Mivel az intervallum időtartamát 1 napra határoztuk meg, így minden dátumot naponta 1 összeadással növekszünk
>> válasszon * a generációs_sorozat közül (most (), most () + '4 nap', '1 nap');
03. példa: Dátumsorok előállítása időbélyegek használatával
Órák időbélyegei: Ez a funkció az időbélyegek adattípusát is használja. Az időbélyeg alapvetően egy karaktersorozat, amely megadja a kapcsolódó nap idejét és dátumát. A megfelelő függvény megkönnyíti a felhasználót abban, hogy dátumokat adjon meg mindkét olyan dátum között, amelyet előre használtunk a lekérdezésben. Megkapja a 7. és 11. dátum közötti időbélyegek listáját, 5 óránként egy időbélyeggel.
>> select * from generációs_sorozat ('2021-3-7 00:00' :: időbélyeg, '2021-3-11 12:00', '5 óra');
A lekérdezés, amint azt a fentiekben említettük, percek és másodpercek órákkal történő hozzáadására is szolgál, hogy jobb időbélyeget kapjon a releváns időbélyegző napjai között.
Napok időbélyegei: A túllépő példában azt láttuk, hogy az időbélyegzővel a két megfelelő dátum közti dátumokat mutatjuk be, amelyekben a változtatást 5 órával növeltük órákban. A jelenlegi példában az időbélyeget napokban fogjuk látni. A napok száma 2-vel növekszik, mivel az adott kimenetben 2 napos rést indítottunk.
>> select * a generációs_sorozatból ('2021-03-01' :: timestamptz, '2021-03-19' :: timestamptz, '2 nap');
44. példa: A hónap meghatározott dátumainak előállítása a date_trunc segítségével
A hónap első napja
Ha az aktuális hónap első dátumát szeretnénk előállítani, akkor az alább mellékelt lekérdezést fogjuk használni.Az itt használt külön függvény a date_trunc, amely a pontosságot csonkolja.én.e. Most()
>> select date_trunc ('hónap', most ());A hónap utolsó napja
Ugyanez a date_trunc megközelítés generálja a hónap utolsó napját.
>> válassza a date_trunc ('hónap', most ()) + '1 hónap' :: intervallum - '1 nap' :: intervallumot a hónap végének;A hónap közepe
A hónap közepét az előző lekérdezés módosításával kapjuk meg. Az átlagfüggvényt felhasználjuk az adott cél elérésére. Vagy kivonunk 17 napot az utolsóból.
>> válassza a date_trunc ('hónap', most ()) + '1 hónap' :: intervallum - '17 nap ':: intervallumot a hónap közepén;
05. példa: Dátumok előállítása naptárhoz kapcsolódó adatok felhasználásával
Itt jön a példa a naptáradatok felhasználására. Megismerjük a szökő évet, azaz.e., a februári hónap összes napja.A „t” azt jelenti, hogy valódi azt jelenti, hogy az év szökőév, az „f” esetében pedig hamis „dow” a hét napjait jelenti. A „február” oszlop a hónap összes napját tartalmazza. A „nap” Jan minden év első napját jelöli. A kutatások szerint az ISO hetei hétfőtől kezdődnek, és az év első hete az év január 5-ét tartalmazza.
>> válassza a dátumot: dátumot, kivonatot ('isodow' dátumtól) dow-ként, to_char (dátum, 'dy') napként, kivonatot ('iso év' dátumtól kezdve) "iso évként", kivonatot ('hét') dátumtól) hétként, kivonat („nap” -tól (dátum + intervallum „2 hónap - 1 nap”)) febr., kivonat („év” dátumtól) évként, kivonat („nap” -tól (dátum + intervallum) 2 hónap - 1 nap ')) = 29, ugrás a generátor_sorozatból (dátum: "2010-01-01", dátum: "2020-03-01", intervallum: "1 év"), mint t (dátum);Az Isodow a hét „ISO” szabványos napja. A lekérdezés 2010 és 2020 között fog végrehajtódni, miközben az év minden hónapját, hetét és napját manipulálja.
06. példa: Adott dátumok és napok sorozatának generálása a héten
Ebben a lekérdezésben a dátumokat és a napok számát úgy kapjuk meg, hogy egy napban kiszűrjük a napokat. Számszerűen figyelembe vesszük a hét napjait. Például 0-tól 6-ig. Ahol 0 vasárnap és 6 szombat. Ebben a lekérdezésben azt fogja látni, hogy egy feltételt alkalmaztunk olyan dátumok és napszámok behozatalára, amelyek nem a 2. és az 5. számban szerepelnek. Például február 20-án szombat volt, tehát a megjelent szám 6.
>> napokkal (válasszon dd-t, kivonat (DOW-t dd-ből) dw a generációs_sorozatból ('2021-02-20' :: date, '2021-03-05' :: date, '1 day' :: interval ) válasszon * azon napok közül, ahol dw nem szerepel a (2,5) pontban;
Következtetés
A cikk, amint azt fentebb említettük, a dátumsorok létrehozásához szükséges sorozatok létrehozásával kapcsolatos alapvető funkciók többségét lefedi. A minden szempontból tárgyalt részletes példák annyira értelmesek, hogy növelik az adott cikk ismereteit.