sql >> Databasteknik >  >> RDS >> PostgreSQL

Arbeta med datum i PostgreSQL


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:

  1. värdet du vill formatera
  2. 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.




  1. SQL*Plus kör inte SQL-skript som SQL Developer gör

  2. Hur konfigurerar man Ruby on Rails med Oracle?

  3. Hur undkommer jag % från python mysql-frågan

  4. Android:öppnar och stänger SQLite-databas