Introduktion
Möjligheten att lagra datumvärden inuti din databas låter dig lägga till ett tidselement till dina frågor och analys av dina data. Det är viktigt att veta hur du arbetar med datumtyper i din respektive databas så att du kan vara korrekt i din rapportering oavsett om det är beställningsinformation, personers ålder eller andra användningsfall.
I den här guiden kommer vi att diskutera lagring av DATE
typer i PostgreSQL och de olika sätt som du kan arbeta med dem.
PostgreSQL DATE
datatyp
DATE
typ i PostgreSQL kan lagra ett datum utan ett tillhörande tidsvärde:
DATE
PostgreSQL använder 4 byte för att lagra ett datumvärde. Värdeintervallet för datumvärden i PostgreSQL är 4713 BC till 5874897 AD.
När du lagrar ett datumvärde använder PostgreSQL yyyy-mm-dd
format t.ex. 1994-10-27. Detta format används också i PostgreSQL för att infoga data.
I PostgreSQL är det möjligt att ställa in ett standarddatumvärde för det aktuella datumet. Detta kan göras när du skapar din tabell genom att använda DEFAULT
och CURRENT_DATE
nyckelord. last_checkout
kolumnen från vår biblioteksutcheckningstabell accepterar det aktuella datumet som standard:
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);
Efter denna tabellstruktur kan vi infoga data med INSERT INTO
uttalande:
INSERT INTO checkouts (author_name, book_title, published_date)VALUES('James Joyce', 'Ulysses', '1922-02-02');
Sedan när du frågar checkouts
tabell får vi följande:
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
funktioner
Genom att känna till detaljerna i DATE
skriv in PostgreSQL, du kan sedan använda funktioner som arbetar med informationen som du lagrar. Vi går igenom några vanliga funktioner som bygger på tabellen som introducerades i föregående avsnitt.
Hämta det aktuella datumet
I PostgreSQL kan du få aktuellt datum och tid genom att använda den inbyggda NOW()
fungera. Följande uttalande kommer att returnera både dag och tid:
SELECT NOW(); now ------------------------------- 2021-09-27 15:22:53.679985+02(1 row)
Om tiden inte är av intresse kan du också ange att endast returnera datumet med dubbla kolon ::
för att casta en DATETIME
värde till DATE
värde:
SELECT NOW()::date; now ------------ 2021-09-27(1 row)
Använder CURRENT_DATE
är ett annat sätt att få det aktuella datumet som visas nedan:
SELECT CURRENT_DATE; current_date -------------- 2021-09-27(1 row)
Alla dessa tre alternativ kommer att returnera datumet i yyyy-mm-dd
formatera. Inom PostgreSQL kan du justera formatet för denna utdata om så önskas.
Skriv ut ett datumvärde i ett specifikt format
För att mata ut ett datumvärde i ett specifikt format använder du TO_CHAR()
fungera. Denna funktion accepterar två parametrar:
- värdet du vill formatera
- mallen som definierar utdataformatet
SELECT TO_CHAR(NOW()::date, 'dd/mm/yyyy'); to_char ------------ 27/09/2021(1 row)
Du kan också visa datumet i ett format som Sep 27, 2021
:
SELECT TO_CHAR(NOW():: DATE, 'Mon dd, yyyy'); to_char -------------- Sep 27, 2021(1 row)
Beroende på kraven i ett system kan du behöva ett datum formaterat på ett specifikt sätt. Detta är ett scenario där det är användbart att kunna specificera utdata i PostgreSQL.
Hämta intervallet mellan två datum
PostgreSQL låter dig få intervallet mellan två datum med hjälp av -
operatör. Genom att använda den här operatorn kan du beräkna saker som en anställds anställningstid eller tid sedan en bok publicerades.
I vårt exempel vill vi ta reda på hur många dagar det har gått sedan Joyces Ulysses publicerades genom att subtrahera det aktuella datumet från published_date
:
SELECT author_name, book_title, now()::date - published_date as diffFROM checkouts;
Resulterar i:
author_name | book_title | diff -------------+------------+---------------------------- James Joyce | Ulysses | 36397 days (1 row)
Beräkna ålder med hjälp av datumvärden
Vi kan fortsätta med samma exempel för att beräkna åldern vid det aktuella datumet i år, månader och dagar med AGE()
fungera. Följande sats använder AGE()
funktion för att beräkna åldern på en publikation från vårt bibliotek checkouts
tabeller:
SELECT author_name, book_title, AGE(published_date)FROM checkouts;
Med denna funktion kan vi beräkna hur gammal en bok i lager är:
author_name | book_title | age -------------+------------+------------------------- James Joyce | Ulysses | 99 years 7 mons 25 days(1 row)
Det är viktigt att notera att om du skickar ett enda datum till AGE()
funktion, då kommer den automatiskt att använda det aktuella datumet för att subtrahera och beräkna. Du kan också skicka två datum till funktionen för att beräkna ålder som:
SELECT author_name, book_title, AGE('2000-01-01',published_date),FROM checkouts;
Resulterar i:
author_name | book_title | age -------------+------------+-------------------------- James Joyce | Ulysses | 77 years 10 mons 27 days(1 row)
Extrahera år, kvartal, månad, vecka eller dag från ett datumvärde
Den sista funktionen som vi kommer att täcka är EXTRACT()
funktion i PostgreSQL som låter dig separera komponenterna för datum som år, kvartal, månad och dag.
Följande uttalande drar ut år, månad och dag från det publicerade datumet för 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;
Resultaten kommer att se ut så här:
author_name | book_title | year | month | day -------------+------------+------+-------+----- James Joyce | Ulysses | 1922 | 2 | 2(1 row)
Detta är en användbar funktion att vara medveten om när du kanske bara behöver en del av ett datumvärde för en beräkning med dina data till exempel.
Slutsats
I den här guiden täckte vi grunderna om vad du kan göra med DATE
datatyp i PostgreSQL. Det är viktigt att veta hur datumdata fungerar inuti din databas. Genom att ha ett grepp om hur du kan komma åt det och använda det kan du göra åldersberäkningar, utföra extraheringar i dina frågor och även konfigurera din utdata om det behövs för att matcha ett annat systems krav.