V tomto článku prozkoumáme data Postgres, různé datové typy, použití a funkce.
Datum a časová razítka jsou užitečné pro analýzu dat a ukládání dat pro kontrolu, kdy k události skutečně došlo. Například, když máte nákupní a prodejní objednávky, měsíční nebo čtvrtletní příjmy a další. Formáty data se v různých zemích liší, proto to může být komplikovaný úkol pro ty, kteří se správou databází začínají a pracují se sloupci data. Formát nebo datový typ sloupce data by měl vždy odpovídat zadání uživatele. Kromě toho byste měli převést zobrazení formátu data podle požadavků vašeho uživatele.
Postgres má řadu podporovaných datových typů. Než budete pokračovat dále, doporučuji vám prostudovat si Prozkoumání různých datových typů Postgres, abyste jim porozuměli podrobněji.
Datový typ Postgres DATE
Postgres používá datový typ DATE pro ukládání různých dat ve formátu RRRR-MM-DD. Používá 4 bajty pro uložení hodnoty data ve sloupci.
- Nejnižší datum:4713 př.nl
- Nejvyšší datum:5874897 př.nl
- Formát data:RRRR-MM-DD (např. 2021-01-01)
Můžete navrhnout tabulku Postgres se sloupcem DATE a použít klíčové slovo DEFAULT CURRENT_DATE použít aktuální systémové datum jako výchozí hodnotu v tomto sloupci.
CREATE TABLE SalesOrders (Order_id serial PRIMARY KEY,Orderdetails VARCHAR (255) NOT NULL,OrderDate DATE NOT NULL DEFAULT CURRENT_DATE);INSERT INTO SalesOrders (Orderdetails)VALUES('Ukázka SELECT *FROMO Sales');
Jak je ukázáno níže, SQL automaticky vloží hodnotu do sloupce [OrderDate] s aktuálním systémovým datem ve formátu RRRR-MM-DD.
Funkce Postgres DATE
Často potřebujeme upravit formát data nebo provést výpočty na existujících hodnotách uložených v tabulce Postgres. Například v Indii je obvyklý formát data DD-MM-RRRR. Když si tedy indický uživatel zobrazí data, pravděpodobně po něm budeme chtít, aby zobrazil data ve formátu, který zná nejlépe. V tomto případě hrají důležitou roli funkce SQL.
Funkce TO_CHAR()
Tato funkce je užitečná pro poskytování výstupu hodnoty data Postgres v určeném formátu. Přijímá následující dva parametry.
- Zadejte datum:Toto je datum, které chcete převést do určitého formátu.
- Formát data:Zde zadáváte nový formát data.
Následující dotaz převádí existující hodnoty data uložené v tabulce [SalesOrders] do formátu DD-MM-RRRR.
SELECT Orderdetails,OrderDate as ExistingDateformat,to_char(OrderDate,'DD-MM-YYYY') As NewDateFormat FROM SalesOrders;
Podporované hodnoty ve funkci to_char() jsou uvedeny níže.
RRRR | Rok ve čtyřech číslicích |
RRRR | Poslední tři číslice roku |
YY | Poslední dvě číslice roku |
MĚSÍC | Název měsíce velkými písmeny |
Měsíc | Název měsíce s prvním velkým písmenem |
měsíc | Název měsíce malými písmeny |
PO/Po/po | Zkratka měsíce velká, první písmeno velké a všechna malá písmena |
MM | Číslo měsíce (01-12) |
DEN/Den/den | Název dne velkými, prvním velkým a všemi malými písmeny |
DDD | Den v roce (001 až 366) |
DD | Den v měsíci (01 až 31) |
D | Den v týdnu (neděle (1) až sobota (7)) |
W | Týden v měsíci |
WW | Týden v roce |
Několik příkladů různých formátů data je uvedeno v následujícím SQL.
SELECT Orderdetails,OrderDate as ExistingDateformat,to_char(OrderDate,'DD-MM-YYYY') As DDMMYYYY,to_char(OrderDate,'DD-MM-YY') As DDMMMYY,to_char(OrderDate,'DD.MM.YY ') Jako "DD.MM.YY",to_char(Datum objednávky,'MM/DD/RRRR') Jako "MM/DD/RRRR",to_char(Datum objednávky,'DAY MM/DD/RRRR') Jako "MM/DD /YYYY",to_char(OrderDate,'DDD MM/DD/YYYY') Jako "DDD MM/DD/RRRR" OD SalesOrders
Funkce Now()
Funkce Now() vrací aktuální systémové časové razítko (datum a čas).
Chcete-li přenést hodnotu DATETIME na hodnotu DATE, můžete zadat dvojité dvojtečky (::).
Můžete kombinovat TO_CHAR() a funkci Now() a převést aktuální časové razítko do zadaného formátu.
SELECT TO_CHAR(NOW() ::DATE, 'dd-mm-yyyy');
Operátor mínus a interval
K výpočtu rozdílu mezi dvěma daty můžete použít operátor mínus (-). Například níže uvedený dotaz vrátí interval mezi aktuálním časovým razítkem a [Orderdate] z tabulky SalesOrders.
SELECT Datum objednávky,nyní() jako aktuální datum,nyní()-Datum objednávky jako interval FROM SalesOrderswhere order_id=2;
Můžete také zadat interval pro vracení data po zadaném období. Například níže uvedený dotaz SQL poskytuje následující hodnoty.
- Pro budoucí datum zadejte hodnotu intervalu 2 hodiny od aktuálního časového razítka: nyní() + interval „2 hodiny“
- Pro budoucí datum zadejte hodnotu intervalu 1 den od aktuálního časového razítka: nyní() + interval „1 den“
- Pro minulé datum zadejte hodnotu intervalu jeden rok od aktuálního časového razítka: Nyní() – interval „1 rok“
- Vypočítejte jeden rok po datu z hodnoty uložené ve sloupci [Orderdate]: orderdate – interval ‘1 year’
VYBRAT (NYNÍ() + interval '2 hodiny') JAKO o dvě hodiny,(NOW() + interval '1 den') JAKO O jeden den,(NOW() - interval '1 rok') JAKO Jeden rokPřed,(Datum objednávky- interval '1 rok') jako rozdíl mezi datem objednávky od prodejních objednávek;
Funkce AGE()
Funkce AGE() vrací rozdíl data v letech, měsících a dnech. Tuto funkci můžete použít k výpočtu věku osoby.
Tato funkce přijímá dva parametry data a odečítá první hodnotu data od druhé.
Pokud obrátíte hodnoty ve výše uvedeném funkčním skriptu, vrátí hodnotu zápornou.
V dalším příkladu řekněme, že někdo má datum narození 1990-07-01. Věk osoby lze proto vypočítat níže uvedeným způsobem.
SELECT current_date,AGE(timestamp '1990-07-01') as EmpAge;
Funkce EXTRACT()
Funkce Extract() vrací den, týden, měsíc, rok a čtvrtletí ze zadané hodnoty data.
Extrahujte rok
ZVOLTE EXTRACT (YEAR FROM TIMESTAMP '2021-06-28 10:30:15') jako rok;
Extrahujte měsíc
ZVOLTE EXTRACT (Měsíc OD TIMESTAMP '2021-06-28 10:30:15') jako měsíc;
Extrahujte čtvrtinu
VYBERTE VÝTAH (ČTVRTLETÍ OD ČASOVÉ ZNAČKY '2021-06-28 10:30:15') jako ČTVRTLETÍ;
Extrahování dne v týdnu
VYBERTE EXTRAKT (DOW FROM TIMESTAMP '2021-06-28 10:30:15') as DOW;
Vyjmutí dne v roce
SELECT EXTRACT (DOY FROM TIMESTAMP '2021-06-28 10:30:15') as DOY;
Můžete také použít funkci EXTRACT() v kombinaci s INTERVAL. Například níže specifikujeme interval jako 7 let 9 měsíců 20 dní 09 hodin 12 minut a 13 sekund. Funkce extrakt vrací jednotlivé hodnoty.
ZVOLTE EXTRAKT (ROK Z INTERVALU '7 let 9 měsíců 20 dní 09 hodin 12 minut 13 sekund' ),EXTRAKT (Měsíc Z INTERVALU '7 let 9 měsíců 20 dní 09 hodin 12 minut 13 sekund' ), EXTRAKT (Den Z INTERVALU '7 roky 9 měsíců 20 dní 09 hodin 12 minut 13 sekund' ),EXTRAKT (hodina Z INTERVALU '7 let 9 měsíců 20 dní 09 hodin 12 minut 13 sekund' ),EXTRAKT (minuta Z INTERVALU '7 let 9 měsíců 20 dní 09 hodin 12 minut 13 druhý');;
V ČASOVÉM PÁSMU
Někdy je potřeba převést časové razítko do jiného časového pásma. Můžete například uložit hodnoty data v UTC (Universal Time Coordinator) a převést časové pásmo podle potřeby.
SELECT * FROM pg_timezone_names;
Chcete-li zkontrolovat aktuální časové pásmo, použijte ZOBRAZIT ČASOVÉ ZÓNO, jak je uvedeno níže.
Můžete si vybrat požadovanou hodnotu časového pásma z pg_timezone_names a použít AT TIME ZONE pro získání výstupu pro zadané časové pásmo.
SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'Amerika/Chicago';
Podobně můžeme získat různé výstupy časového pásma pomocí AT TIME ZONE.
SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'Amerika/New_York';
SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'Asie/Qatar';
SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'Europe/Istanbul';
Shrnutí
Typy dat Postgres jsou zásadní a cenné při ukládání datových a časových razítek v téměř každé tabulce relační databáze. Potřebujete je pro různé účely, jako je vkládání objednávek nebo při aktualizaci časového razítka, nákupních a prodejních objednávek, podrobností o událostech, informací o zákaznících a zaměstnancích a další. K převodu typu data na požadované časové pásmo, formát a konkrétní informace můžete použít několik funkcí Postgres, abyste si zjednodušili extrakci a analýzu vašich dat.