sql >> Database teknologi >  >> RDS >> PostgreSQL

Arbejde med datoer i PostgreSQL


Introduktion

Evnen til at gemme datoværdier inde i din database giver dig mulighed for at tilføje et tidselement til dine forespørgsler og analyse af dine data. Det er vigtigt at vide, hvordan du arbejder med datotyper i din respektive database, så du kan være præcis i din rapportering, uanset om det er ordreoplysninger, folks alder eller enhver anden brugssituation.

I denne vejledning vil vi diskutere lagring af DATE typer i PostgreSQL og de forskellige måder, du kan arbejde med dem på.



PostgreSQL DATE datatype

DATE type i PostgreSQL kan gemme en dato uden en tilknyttet tidsværdi:

DATE

PostgreSQL bruger 4 bytes til at gemme en datoværdi. Værdiintervallet for datoværdier i PostgreSQL er 4713 f.Kr. til 5874897 e.Kr.

Når du gemmer en datoværdi, bruger PostgreSQL yyyy-mm-dd format f.eks. 1994-10-27. Dette format bruges også i PostgreSQL til at indsætte data.

I PostgreSQL er det muligt at indstille en standard datoværdi for den aktuelle dato. Dette kan gøres, når du opretter din tabel ved at bruge DEFAULT og CURRENT_DATE søgeord. last_checkout kolonne fra vores biblioteks kassetabel accepterer den aktuelle dato 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 denne tabelstruktur kan vi indsætte data med INSERT INTO erklæring:

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

Så når du forespørger checkouts tabel, får vi følgende:

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

Ved at kende ins og outs af DATE indtaste PostgreSQL, kan du derefter bruge funktioner, der arbejder med de oplysninger, du gemmer. Vi vil gennemgå nogle almindelige funktioner, der bygger på tabellen introduceret i det foregående afsnit.


Få den aktuelle dato

I PostgreSQL kan du få den aktuelle dato og tid ved at bruge den indbyggede NOW() fungere. Følgende erklæring returnerer både dag og klokkeslæt:

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

Hvis tidspunktet ikke er af interesse, kan du også angive kun at returnere datoen med dobbelte koloner :: for at caste en DATETIME værdi til DATE værdi:

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

Bruger CURRENT_DATE er en anden måde at få den aktuelle dato på som vist nedenfor:

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

Alle disse tre muligheder giver dig datoen i yyyy-mm-dd format. Inden for PostgreSQL kan du justere formatet på dette output, hvis det ønskes.



Output en datoværdi i et bestemt format

For at udlæse en datoværdi i et bestemt format, bruger du TO_CHAR() fungere. Denne funktion accepterer to parametre:

  1. den værdi, du vil formatere
  2. skabelonen, der definerer outputformatet
SELECT TO_CHAR(NOW()::date, 'dd/mm/yyyy');  to_char   ------------ 27/09/2021(1 row)

Du kan også vise datoen i et format som Sep 27, 2021 :

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

Afhængigt af kravene til et system, kan du have brug for en dato formateret på en bestemt måde. Dette er et scenarie, hvor det er nyttigt at kunne specificere outputtet i PostgreSQL.



Få intervallet mellem to datoer

PostgreSQL giver dig mulighed for at få intervallet mellem to datoer ved at bruge - operatør. Ved at bruge denne operator kan du beregne ting som en medarbejders ansættelsestid eller tid siden udgivelsen af ​​en bog.

I vores eksempel ønsker vi at finde ud af, hvor mange dage der er gået siden Joyces Ulysses blev udgivet ved at trække den aktuelle dato fra published_date :

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

Resulterer i:

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


Beregning af alder ved hjælp af datoværdier

Vi kan fortsætte med det samme eksempel for at beregne alderen på den aktuelle dato i år, måneder og dage ved hjælp af AGE() fungere. Følgende sætning bruger AGE() funktion til at beregne alderen på en publikation fra vores bibliotek checkouts tabeller:

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

Med denne funktion kan vi beregne, hvor gammel en bog på lager er:

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

Det er vigtigt at bemærke, at hvis du overfører en enkelt dato til AGE() funktion, så vil den automatisk bruge den aktuelle dato til at trække og beregne. Du er også i stand til at overføre to datoer til funktionen til at beregne alder, såsom:

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

Resulterer i:

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


Udtrækning af år, kvartal, måned, uge ​​eller dag fra en datoværdi

Den sidste funktion, som vi skal dække, er EXTRACT() funktion i PostgreSQL, der giver dig mulighed for at adskille komponenterne i dato som år, kvartal, måned og dag.

Følgende erklæring trækker år, måned og dag fra den offentliggjorte dato for 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;

Resultaterne vil se således ud:

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

Dette er en nyttig funktion at være opmærksom på, når du måske kun har brug for en del af en datoværdi til f.eks. en beregning med dine data.




Konklusion

I denne vejledning dækkede vi det grundlæggende i, hvad du kan gøre med DATE datatype i PostgreSQL. Det er vigtigt at vide, hvordan datodata fungerer inde i din database. Ved at have et greb om, hvordan du kan få adgang til det og betjene det, kan du lave aldersberegninger, udføre ekstraktioner i dine forespørgsler og også konfigurere dit output, hvis det er nødvendigt for at matche et andet systems krav.




  1. MySQL - Operand skal indeholde 1 kolonne(r)

  2. Brug af OAuth til at godkende din ODBC-forbindelse til Salesforce.com

  3. For sidste gang, NEJ, du kan ikke stole på IDENT_CURRENT()

  4. Værelse bedste måder at oprette sikkerhedskopier til offline applikation?