sql >> Database >  >> RDS >> PostgreSQL

Werken met datums in PostgreSQL


Inleiding

De mogelijkheid om datumwaarden in uw database op te slaan, stelt u in staat een tijdselement toe te voegen aan uw zoekopdrachten en analyse van uw gegevens. Het is belangrijk om te weten hoe u met datumtypes in uw respectieve database werkt, zodat u nauwkeurig kunt zijn in uw rapportage, of het nu gaat om bestelinformatie, leeftijden van mensen of een ander gebruiksscenario.

In deze handleiding gaan we het hebben over het opslaan van DATE typen in PostgreSQL en de verschillende manieren waarop u ermee kunt werken.



PostgreSQL DATE gegevenstype

De DATE type in PostgreSQL kan een datum opslaan zonder een bijbehorende tijdwaarde:

DATE

PostgreSQL gebruikt 4 bytes om een ​​datumwaarde op te slaan. Het bereik van waarden voor datumwaarden in PostgreSQL is 4713 BC tot 5874897 AD.

Bij het opslaan van een datumwaarde gebruikt PostgreSQL de yyyy-mm-dd formaat bijv. 1994-10-27. Dit formaat wordt ook gebruikt in PostgreSQL voor het invoegen van gegevens.

In PostgreSQL is het mogelijk om een ​​standaard datumwaarde van de huidige datum in te stellen. Dit kan worden gedaan bij het maken van uw tabel met behulp van de DEFAULT en CURRENT_DATE trefwoorden. De last_checkout kolom uit onze bibliotheek kassatabel accepteert standaard de huidige 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);

Door deze tabelstructuur te volgen, kunnen we gegevens invoegen met de INSERT INTO verklaring:

INSERT INTO checkouts (author_name, book_title, published_date)VALUES('James Joyce', 'Ulysses', '1922-02-02');

Dan bij het opvragen van de checkouts tabel krijgen we het volgende:

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 functies

Door de ins en outs van de DATE . te kennen typt u PostgreSQL, dan kunt u functies gebruiken die werken met de informatie die u opslaat. We zullen enkele veelvoorkomende functies doornemen die voortbouwen op de tabel die in de vorige sectie is geïntroduceerd.


De huidige datum ophalen

In PostgreSQL kunt u de huidige datum en tijd krijgen met behulp van de ingebouwde NOW() functie. De volgende verklaring geeft zowel de dag als de tijd terug:

SELECT NOW();              now              ------------------------------- 2021-09-27 15:22:53.679985+02(1 row)

Als de tijd niet van belang is, kunt u ook specificeren dat de datum alleen met dubbele dubbele punten wordt geretourneerd :: om een ​​DATETIME te casten waarde naar de DATE waarde:

SELECT NOW()::date;    now     ------------ 2021-09-27(1 row)

CURRENT_DATE gebruiken is een andere manier om de huidige datum te krijgen, zoals hieronder wordt aangetoond:

SELECT CURRENT_DATE; current_date -------------- 2021-09-27(1 row)

Bij alle drie deze opties krijgt u de datum terug in de yyyy-mm-dd formaat. Binnen PostgreSQL kunt u desgewenst het formaat van deze uitvoer aanpassen.



Voer een datumwaarde uit in een specifiek formaat

Om een ​​datumwaarde in een specifiek formaat uit te voeren, gebruikt u de TO_CHAR() functie. Deze functie accepteert twee parameters:

  1. de waarde die u wilt opmaken
  2. het sjabloon dat het uitvoerformaat definieert
SELECT TO_CHAR(NOW()::date, 'dd/mm/yyyy');  to_char   ------------ 27/09/2021(1 row)

U kunt de datum ook weergeven in een formaat zoals Sep 27, 2021 :

SELECT TO_CHAR(NOW():: DATE, 'Mon dd, yyyy');   to_char    -------------- Sep 27, 2021(1 row)

Afhankelijk van de vereisten van een systeem, heeft u mogelijk een datum nodig die op een specifieke manier is opgemaakt. Dit is een scenario waarin het handig is om de uitvoer in PostgreSQL te kunnen specificeren.



Het interval tussen twee datums ophalen

Met PostgreSQL kunt u het interval tussen twee datums krijgen met behulp van de - exploitant. Met deze operator kunt u zaken berekenen zoals de ambtstermijn van een werknemer of de tijd sinds de publicatie van een boek.

In ons voorbeeld willen we zien hoeveel dagen het geleden is dat Joyce's Ulysses werd gepubliceerd door de huidige datum af te trekken van de published_date :

SELECT                author_name,                book_title,                now()::date - published_date as diffFROM                checkouts;

Resulterend in:

 author_name | book_title |            diff            -------------+------------+---------------------------- James Joyce |  Ulysses   |         36397 days (1 row)


Leeftijd berekenen met datumwaarden

We kunnen doorgaan met hetzelfde voorbeeld om de leeftijd op de huidige datum in jaren, maanden en dagen te berekenen met behulp van de AGE() functie. De volgende instructie gebruikt de AGE() functie om de leeftijd van een publicatie uit onze bibliotheek te berekenen checkouts tabellen:

SELECT                author_name,                book_title,                AGE(published_date)FROM                checkouts;

Met deze functie kunnen we berekenen hoe oud een boek in de inventaris is:

 author_name | book_title |           age           -------------+------------+------------------------- James Joyce |  Ulysses   | 99 years 7 mons 25 days(1 row)

Het is belangrijk op te merken dat als u een enkele datum doorgeeft aan de AGE() functie, dan zal het automatisch de huidige datum gebruiken om af te trekken en te berekenen. U kunt ook twee datums doorgeven aan de functie om de leeftijd te berekenen, zoals:

SELECT                author_name,                book_title,                AGE('2000-01-01',published_date),FROM                checkouts;

Resulterend in:

 author_name | book_title |           age            -------------+------------+-------------------------- James Joyce |  Ulysses   | 77 years 10 mons 27 days(1 row)


Jaar, kwartaal, maand, week of dag extraheren uit een datumwaarde

De laatste functie die we gaan behandelen is de EXTRACT() functie in PostgreSQL waarmee u de componenten van de datum kunt scheiden, zoals het jaar, het kwartaal, de maand en de dag.

De volgende verklaring haalt het jaar, de maand en de dag uit de publicatiedatum van 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;

De resultaten zien er als volgt uit:

 author_name | book_title | year | month | day -------------+------------+------+-------+----- James Joyce |  Ulysses   | 1922 |   2   |  2(1 row)

Dit is een handige functie om te weten wanneer u bijvoorbeeld slechts een deel van een datumwaarde nodig heeft voor een berekening met uw gegevens.




Conclusie

In deze handleiding hebben we de basis besproken van wat u kunt doen met de DATE gegevenstype in PostgreSQL. Het is belangrijk om te weten hoe datumgegevens in uw database werken. Door inzicht te hebben in de manieren waarop u er toegang toe hebt en ermee kunt werken, kunt u leeftijdsberekeningen maken, extracties in uw zoekopdrachten uitvoeren en indien nodig ook uw uitvoer configureren om aan de vereisten van een ander systeem te voldoen.




  1. Hoe NTILE() werkt in SQL Server

  2. Hoe <,>, en &tekens te ontsnappen naar html-entiteiten in Oracle PL/SQL

  3. Welke maat gebruikt u voor varchar(MAX) in uw parameterdeclaratie?

  4. Verwijderen met Left Join in Oracle 10g