Úvod
Schopnost ukládat hodnoty data uvnitř databáze vám umožňuje přidat prvek času k vašim dotazům a analýze vašich dat. Je důležité vědět, jak pracovat s typy dat ve vaší databázi, abyste mohli být ve svých hlášeních přesní, ať už jde o informace o objednávkách, věk lidí nebo jakýkoli jiný případ použití.
V této příručce budeme diskutovat o ukládání DATE
typy v PostgreSQL a různé způsoby, jak s nimi můžete pracovat.
PostgreSQL DATE
datový typ
DATE
typ v PostgreSQL může ukládat datum bez přiřazené časové hodnoty:
DATE
PostgreSQL používá 4 bajty k uložení hodnoty data. Rozsah hodnot pro hodnoty data v PostgreSQL je 4713 BC až 5874897 AD.
Při ukládání hodnoty data PostgreSQL používá yyyy-mm-dd
formát např. 1994-10-27. Tento formát se také používá v PostgreSQL pro vkládání dat.
V PostgreSQL je možné nastavit výchozí hodnotu data aktuálního data. To lze provést při vytváření tabulky pomocí DEFAULT
a CURRENT_DATE
klíčová slova. last_checkout
sloupec z naší tabulky pokladen ve výchozím nastavení přijímá aktuální datum:
CREATE TABLE checkouts ( author_id serial PRIMARY KEY, author_name VARCHAR (255) NOT NULL, book_title VARCHAR (255) NOT NULL, published_date DATE NOT NULL, last_checkout DATE NOT NULL DEFAULT CURRENT_DATE);
Podle této struktury tabulky můžeme vkládat data pomocí INSERT INTO
prohlášení:
INSERT INTO checkouts (author_name, book_title, published_date)VALUES('James Joyce', 'Ulysses', '1922-02-02');
Potom při dotazování na checkouts
tabulky, dostaneme následující:
SELECT * FROM checkouts; author_id | author_name | book_title | published_date | last_checkout -----------+-------------+------------+----------------+--------------- 1 | James Joyce | Ulysses | 1922-02-02 | 2021-09-27(1 row)
PostgreSQL DATE
funkce
Tím, že budete znát detaily DATE
zadejte PostgreSQL, pak můžete používat funkce pracující s informacemi, které ukládáte. Projdeme si některé běžné funkce, které vycházejí z tabulky uvedené v předchozí části.
Získat aktuální datum
V PostgreSQL můžete získat aktuální datum a čas pomocí vestavěného NOW()
funkce. Následující příkaz vrátí den i čas:
SELECT NOW(); now ------------------------------- 2021-09-27 15:22:53.679985+02(1 row)
Pokud vás čas nezajímá, můžete také zadat, aby se datum vrátilo pouze s dvojitými dvojtečkami ::
k odeslání DATETIME
hodnotu do DATE
hodnota:
SELECT NOW()::date; now ------------ 2021-09-27(1 row)
Pomocí CURRENT_DATE
je další způsob, jak získat aktuální datum, jak je ukázáno níže:
SELECT CURRENT_DATE; current_date -------------- 2021-09-27(1 row)
Všechny tři tyto možnosti vám vrátí datum v yyyy-mm-dd
formát. V rámci PostgreSQL můžete v případě potřeby upravit formát tohoto výstupu.
Výstup hodnoty data v konkrétním formátu
Pro výstup hodnoty data v určitém formátu použijte TO_CHAR()
funkce. Tato funkce přijímá dva parametry:
- hodnotu, kterou chcete formátovat
- šablonu, která definuje výstupní formát
SELECT TO_CHAR(NOW()::date, 'dd/mm/yyyy'); to_char ------------ 27/09/2021(1 row)
Datum můžete také zobrazit ve formátu jako Sep 27, 2021
:
SELECT TO_CHAR(NOW():: DATE, 'Mon dd, yyyy'); to_char -------------- Sep 27, 2021(1 row)
V závislosti na požadavcích systému můžete potřebovat datum naformátované specifickým způsobem. Toto je scénář, kdy je užitečná možnost specifikovat výstup v PostgreSQL.
Získat interval mezi dvěma daty
PostgreSQL vám umožňuje získat interval mezi dvěma daty pomocí -
operátor. Pomocí tohoto operátoru můžete vypočítat věci, jako je doba trvání zaměstnance nebo doba od vydání knihy.
V našem příkladu chceme zjistit, kolik dní uplynulo od Joyceova Ulysses byl publikován odečtením aktuálního data od published_date
:
SELECT author_name, book_title, now()::date - published_date as diffFROM checkouts;
Výsledkem je:
author_name | book_title | diff -------------+------------+---------------------------- James Joyce | Ulysses | 36397 days (1 row)
Výpočet věku pomocí hodnot data
Můžeme pokračovat ve stejném příkladu a vypočítat věk k aktuálnímu datu v letech, měsících a dnech pomocí AGE()
funkce. Následující příkaz používá AGE()
funkce pro výpočet stáří publikace z naší knihovny checkouts
tabulky:
SELECT author_name, book_title, AGE(published_date)FROM checkouts;
Pomocí této funkce můžeme vypočítat, jak stará je kniha v inventáři:
author_name | book_title | age -------------+------------+------------------------- James Joyce | Ulysses | 99 years 7 mons 25 days(1 row)
Je důležité si uvědomit, že pokud vložíte jedno datum do AGE()
funkce, pak automaticky použije aktuální datum k odečtení a výpočtu. Do funkce pro výpočet věku můžete také zadat dvě data, například:
SELECT author_name, book_title, AGE('2000-01-01',published_date),FROM checkouts;
Výsledkem je:
author_name | book_title | age -------------+------------+-------------------------- James Joyce | Ulysses | 77 years 10 mons 27 days(1 row)
Extrahování roku, čtvrtletí, měsíce, týdne nebo dne z hodnoty data
Poslední funkcí, kterou se budeme zabývat, je EXTRACT()
funkce v PostgreSQL, která vám umožňuje oddělit komponenty data, jako je rok, čtvrtletí, měsíc a den.
Následující výpis obsahuje rok, měsíc a den od data zveřejnění Ulysses :
SELECT author_name, book_title, EXTRACT(YEAR FROM published_date) AS YEAR, EXTRACT(MONTH FROM published_date) AS MONTH, EXTRACT(DAY FROM published_date) AS DAY FROM checkouts;
Výsledky budou vypadat následovně:
author_name | book_title | year | month | day -------------+------------+------+-------+----- James Joyce | Ulysses | 1922 | 2 | 2(1 row)
Je to užitečná funkce, na kterou byste si měli být vědomi, když například pro výpočet s vašimi daty potřebujete pouze část hodnoty data.
Závěr
V této příručce jsme probrali základy toho, co můžete dělat s DATE
datový typ v PostgreSQL. Je důležité vědět, jak data data fungují uvnitř vaší databáze. Pochopení způsobů, jak k němu můžete přistupovat a pracovat s ním, vám umožní provádět výpočty stáří, provádět extrakci dotazů a také konfigurovat výstup, pokud je to nutné, aby odpovídal požadavkům jiného systému.