sql >> Databasteknik >  >> RDS >> PostgreSQL

Förstå PostgreSQL-datumtyper och funktioner (genom exempel)

I den här artikeln kommer vi att titta på hur vi arbetar med datum i PostgreSQL, inklusive de olika datumdatatyperna och -formaten, deras funktioner och hur man hanterar dem i din vardagliga rutin. Vi kommer att använda dbForge Studio för PostgreSQL för att illustrera exemplen.

Du kan använda datum och tidsstämplar för dataanalys och datalagring, eftersom de låter dig avgöra när en händelse faktiskt inträffade. Det knepiga med datum är att deras format varierar i olika länder, så det kan vara en ganska utmanande uppgift för nybörjare inom databashantering. Datatypen och formatet för datumkolumnen bör alltid överensstämma med den information som användaren anger. Dessutom bör du ändra datumformatet för att möta dina användares preferenser. Postgres kan hantera ett brett utbud av dataformat.

Innehåll

  • PostgreSQL DATE-datatypöversikt
  • Använder det aktuella datumet som standardvärde
  • Postgres DATE-funktioner
  • Använda NOW()-funktionen för att få aktuellt datum
  • Använd funktionen TO_CHAR() – mata ut datumvärdet i ett specificerat format
  • Använda minusoperatorn för att få intervallet mellan två datum
  • Användning av AGE()-funktionen för att få datumskillnaden i år, månader och dagar
  • Användning av EXTRACT()-funktionen för att få år, kvartal, månad, vecka, dag från ett datumvärde
  • Använda TO_TIMESTAMP() för att konvertera en sträng till en tidsstämpel
  • Sammanfattning

PostgreSQL DATE datatypöversikt

DATE datatyp i PostgreSQL används för att lagra datum i formatet ÅÅÅÅ-MM-DD (t.ex. 2022-03-24). Den behöver 4 byte för att lagra ett datumvärde i en kolumn. Observera att det tidigaste möjliga datumet är 4713 f.Kr. och det senaste möjliga datumet är 5874897 e.Kr.

Det är mycket viktigt att behålla kodens läsbarhet när du skriver den. dbForge Studio för PostgreSQL kan skryta med en bekväm och intuitiv PostgreSQL-formaterare. Genom att ta hand om kodformatering, syntaxkontroll och kodkomplettering, kommer Postgres SQL-formateringsfunktion inbyggd dbForge Studio för PostgreSQL att låta dig fokusera på att hantera datatypen DATE också.

Använda det aktuella datumet som standardvärde

Standardvärdet i en DATE kolumnen i en Postgres-databas kan ställas in genom att använda nyckelordet DEFAULT CURRENT DATE , som i skriptet nedan:

CREATE TABLE myevents (
event_id serial PRIMARY KEY,
event_details VARCHAR (255) NOT NULL,
event_date DATE NOT NULL DEFAULT CURRENT_DATE
);
INSERT INTO myevents (event_details)
VALUES('Meeting the client ABC');
 
SELECT * FROM myevents;

Som du kan se är ett värde för [händelsedatum] kolumnen infogas automatiskt av PostgreSQL-servern, med det aktuella systemdatumet i formatet ÅÅÅÅ-MM-DD.

Postgres DATE-funktioner

Ibland är det viktigt att ändra datumformatet eller beräkna värdena i PostgreSQL-tabellen. Vi kan behöva göra detta för användare från olika tidszoner över hela världen. I det här fallet är SQL-funktioner avgörande.

Använda NOW()-funktionen för att få aktuellt datum

SELECT now();

Du kan använda dubbla kolon (::) för att kasta en DATETIME värde till ett DATE värde som visas nedan:

Det aktuella systemets tidsstämpel returneras av NOW() fungera. Syntaxen är som följer:

SELECT now()::date;

Använd funktionen TO_CHAR() – mata ut datumvärdet i ett specificerat format

För att presentera utdata från ett Postgres-datumvärde i ett specificerat format, TO_CHAR() funktion kommer väl till pass. Syntaxen är följande:

TO_CHAR(expression, format)

Det finns två parametrar som accepteras av TO_CHAR() funktion:

  • Inmatningsdatum :Datumet som ska konverteras till ett specifikt format.
  • Datumformat :Platshållaren för en ny datumformatspecifikation.

Låt oss se hur du konverterar de befintliga datumvärdena från [MyEvents] tabell i formatet DD-MM-ÅÅÅÅ.

SELECT event_details,event_date as ExistingDateformat,
to_char(event_date,'DD-MM-YYYY') As NewDateFormat FROM myevents;

För att konvertera den aktuella tidsstämpeln till det föredragna formatet kan du kombinera TO_CHAR() och NOW() funktioner.

SELECT TO_CHAR(NOW() :: DATE, 'dd-mm-yyyy');

Använda minusoperatorn för att få intervallet mellan två datum

För att beräkna skillnaden mellan två datum, använd minusoperatorn (-). Frågan nedan visar tidsperioden mellan den aktuella tidsstämpeln och [eventdate] från Mina evenemang tabell.

SELECT event_date,now() as currentdate,
now()-event_date as Interval FROM myevents
where event_id=2;

Du kan också välja ett intervall för datumet som ska returneras när en viss tid har gått. Ta en titt på frågan nedan:

SELECT (NOW() + interval '3 hour') AS threehourslater,
(NOW() + interval '2 day') AS Twodaylater,
(NOW() - interval '2 year') AS TwoYearBefore,
(event_date- interval '1 year') as eventdatedifference
from myevents;

Användning av AGE()-funktionen för att få datumskillnaden i år, månader och dagar

Med AGE() funktion kan du få datumskillnaden i år, månader och dagar. Denna funktion kan användas för att fastställa en persons ålder. Det första datumvärdet subtraheras från det andra datumvärdet med denna funktion, som accepterar två datuminmatningar. När värdena i funktionsskriptet är omvända blir resultatet ett negativt värde.

Låt oss ta reda på åldern på den person vars födelsedatum är 1995-10-09. Syntaxen är följande:

SELECT current_date,
AGE(timestamp '1995-10-09'::timestamp) as EmpAge;

Använda EXTRACT()-funktionen för att få år, kvartal, månad, vecka, dag från ett datumvärde

EXTRACT() funktion returnerar en dag, vecka, månad, år och ett kvartal från det angivna datumvärdet.

Extrahera ett år:

SELECT EXTRACT(YEAR FROM TIMESTAMP '2022-04-09 10:30:15') as year;

Extrahera en månad:

SELECT EXTRACT(Month FROM TIMESTAMP '2022-04-09 10:30:15') as Month;

Extrahera en fjärdedel:

SELECT EXTRACT(QUARTER FROM TIMESTAMP '2022-04-09 10:30:15') as QUARTER;

Extrahera veckodagen:

SELECT EXTRACT(DOW FROM TIMESTAMP '2022-04-09 10:30:15') as DOW;

Extrahera årets dag:

SELECT EXTRACT(DOY FROM TIMESTAMP '2022-04-09 10:30:15') as DOY;

Observera att dbForge Studio visar sökresultaten på en separat flik.

EXTRACT() funktionen kan enkelt kombineras med INTERVAL . Låt oss anta att vi vill ställa in intervallet som 5 år 8 månader 23 dagar 08 timmar 10 minuter och 20 sekunder. Individuella värden returneras av EXTRACT funktion.

SELECT EXTRACT(YEAR
FROM INTERVAL '5 years 8 month 23 days 08 hours 10 minutes 20 seconds' ),
EXTRACT(Month
FROM INTERVAL '5 years 8 month 23 days 08 hours 10 minutes 20 seconds' ),
EXTRACT(Day
FROM INTERVAL '5 years 8 month 23 days 08 hours 10 minutes 20 seconds' ),
EXTRACT(hour
FROM INTERVAL '5 years 8 month 23 days 08 hours 10 minutes 20 seconds' ),
EXTRACT(Minute
FROM INTERVAL '5 years 8 month 23 days 08 hours 10 minutes 20 seconds' );

Använda TO_TIMESTAMP() för att konvertera en sträng till en tidsstämpel

Du kan behålla datumvärdena i UTC (Universal Time Coordinator) och ändra tidszonen efter behov om du vill konvertera tidsstämpeln till en annan tidszon.

SELECT * FROM pg_timezone_names;

För att kontrollera den aktuella tidszonen, använd SHOW TIMEZONE kommando.

Du kan använda AT TIME ZONE för att ta emot utdata för den valda tidszonen genom att välja önskat tidszonvärde från pg_timezone_names bord.

SELECT '2022-04-09 10:36:19'::timestamp AT TIME ZONE 'America/Los_Angeles';

AT TIME ZONE låter dig ha olika tidszonutgångar.

SELECT '2022-04-09 10:36:19'::timestamp AT TIME ZONE 'America/Washington';
SELECT '2022-04-09 10:36:19'::timestamp AT TIME ZONE 'Asia/Beijing';
SELECT '2022-04-09 10:36:19'::timestamp AT TIME ZONE 'Europe/Kyiv';

Sammanfattning

För att sammanfatta, PostgreSQL DATE datatyp är mycket viktig och användbar när man lagrar datum och tidsstämplar i tabeller, så det är ganska vanligt i en relationsdatabas. Användningsområdet är otroligt brett, det är därför det är så viktigt att göra dem tydliga för alla användare i alla länder och tidszoner. Med olika Postgres-funktioner är det enkelt att möta användarnas behov, då man kan ändra datum så att de kan användas i en specifik tidszon, med ett visst format och andra detaljer som gör arbetet med sådan data mycket enklare. Slutligen, om du letar efter en perfekt kombination av ett intuitivt grafiskt gränssnitt och en utökad kommandorad som kan göra det möjligt att arbeta med DATE datatyp ännu trevligare, dbForge Studio för PostgreSQL kommer väl till pass.


  1. 3 sätt att hitta rader som innehåller versaler i SQLite

  2. Kardinalitetsuppskattning för ett predikat på ett COUNT-uttryck

  3. Subqueries vs joins

  4. Dynamisk övervakning av PostgreSQL-instanser med pg_top