sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-datumtypen en -functies begrijpen (door voorbeelden)

In dit artikel zullen we kijken naar het werken met datums in PostgreSQL, inclusief de verschillende datumgegevenstypes en -formaten, hun functies en de manieren om ermee om te gaan in uw dagelijkse routine. We zullen dbForge Studio voor PostgreSQL gebruiken om de voorbeelden te illustreren.

U kunt datums en tijdstempels gebruiken voor gegevensanalyse en gegevensopslag, omdat u hiermee kunt bepalen wanneer een gebeurtenis daadwerkelijk heeft plaatsgevonden. Het lastige van datums is dat hun formaten in verschillende landen verschillen, dus het kan een behoorlijk uitdagende taak zijn voor beginners in databasebeheer. Het gegevenstype en de indeling van de datumkolom moeten altijd consistent zijn met de informatie die door de gebruiker is ingevoerd. Bovendien moet u de datumnotatie aanpassen aan de voorkeuren van uw gebruikers. Postgres kan een breed scala aan gegevensformaten aan.

Inhoud

  • Overzicht van PostgreSQL DATE-gegevenstype
  • De huidige datum als standaardwaarde gebruiken
  • Postgres DATE-functies
  • De functie NU() gebruiken om de huidige datum te krijgen
  • De functie TO_CHAR() gebruiken – voer de datumwaarde uit in een gespecificeerd formaat
  • De min-operator gebruiken om het interval tussen twee datums te krijgen
  • De functie AGE() gebruiken om het datumverschil in jaren, maanden en dagen te krijgen
  • De functie EXTRACT() gebruiken om het jaar, kwartaal, maand, week, dag uit een datumwaarde te halen
  • To_TIMESTAMP() gebruiken om een ​​tekenreeks naar een tijdstempel te converteren
  • Samenvatting

Overzicht van PostgreSQL DATE-gegevenstype

DATE gegevenstype in PostgreSQL wordt gebruikt om datums op te slaan in de indeling JJJJ-MM-DD (bijv. 2022-03-24). Het heeft 4 bytes nodig om een ​​datumwaarde in een kolom op te slaan. Merk op dat de vroegst mogelijke datum 4713 v.Chr. is en de laatst mogelijke datum 5874897 n.Chr.

Het is zeer belangrijk om de leesbaarheid van de code te behouden tijdens het schrijven ervan. dbForge Studio voor PostgreSQL kan bogen op een handige en intuïtieve PostgreSQL-formatter. De Postgres SQL-formatterfunctie, ingebouwd in dbForge Studio voor PostgreSQL, zorgt voor code-opmaak, syntaxiscontrole en code-aanvulling, zodat u zich ook kunt concentreren op het omgaan met het gegevenstype DATE.

De huidige datum als standaardwaarde gebruiken

De standaardwaarde in een DATE kolom in een Postgres-database kan worden ingesteld met het trefwoord DEFAULT CURRENT DATE , zoals in het onderstaande script:

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;

Zoals je kunt zien, een waarde voor de [evenementdatum] kolom wordt automatisch ingevoegd door de PostgreSQL-server, waarbij de huidige systeemdatum wordt gebruikt in het formaat JJJJ-MM-DD.

Postgres DATE-functies

Soms is het van cruciaal belang om het datumformaat te wijzigen of de waarden in de PostgreSQL-tabel te berekenen. Mogelijk moeten we dit doen voor gebruikers uit verschillende tijdzones over de hele wereld. In dit geval zijn SQL-functies cruciaal.

De NOW()-functie gebruiken om de huidige datum te krijgen

SELECT now();

U kunt dubbele dubbele punten (::) gebruiken om een ​​DATETIME . te casten waarde naar een DATE waarde zoals hieronder getoond:

De huidige systeemtijdstempel wordt geretourneerd door de NOW() functie. De syntaxis is als volgt:

SELECT now()::date;

De TO_CHAR() functie gebruiken – voer de datumwaarde uit in een gespecificeerd formaat

Om de uitvoer van een Postgres-datumwaarde in een gespecificeerd formaat te presenteren, gebruikt de TO_CHAR() functie komt goed van pas. De syntaxis is als volgt:

TO_CHAR(expression, format)

Er zijn twee parameters die worden geaccepteerd door de TO_CHAR() functie:

  • Invoerdatum :De datum die moet worden geconverteerd naar een specifiek formaat.
  • Datumnotatie :De tijdelijke aanduiding voor een nieuwe datumnotatiespecificatie.

Laten we eens kijken hoe we de bestaande datumwaarden uit de [MyEvents] . kunnen converteren tabel in DD-MM-JJJJ formaat.

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

Om de huidige tijdstempel om te zetten in het gewenste formaat, kun je de TO_CHAR() . fuseren en de NOW() functies.

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

De min-operator gebruiken om het interval tussen twee datums te krijgen

Gebruik de min-operator (-) om het verschil tussen twee datums te berekenen. De onderstaande query geeft de tijdsperiode tussen de huidige tijdstempel en [eventdate] uit de MijnEvenementen tafel.

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

U kunt ook een interval selecteren voor de datum die moet worden geretourneerd wanneer een bepaalde tijd is verstreken. Bekijk de onderstaande vraag:

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;

De functie AGE() gebruiken om het datumverschil in jaren, maanden en dagen te krijgen

Met de AGE() functie, kunt u het datumverschil in jaren, maanden en dagen krijgen. Deze functie kan worden gebruikt om de leeftijd van een persoon te bepalen. De eerste datumwaarde wordt afgetrokken van de tweede datumwaarde met deze functie, die twee datuminvoer accepteert. Wanneer de waarden in het functiescript worden omgekeerd, is het resultaat een negatieve waarde.

Laten we eens kijken naar de leeftijd van de persoon wiens geboortedatum 1995-10-09 is. De syntaxis is als volgt:

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

De functie EXTRACT() gebruiken om het jaar, kwartaal, maand, week, dag uit een datumwaarde te halen

De EXTRACT() functie retourneert een dag, week, maand, jaar en een kwartaal vanaf de opgegeven datumwaarde.

Een jaar extraheren:

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

Een maand extraheren:

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

Een kwart extraheren:

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

Extraheer de dag van de week:

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

Extraheer de dag van het jaar:

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

Merk op dat dbForge Studio de resultaten van de uitvoering van de query elk op een apart tabblad weergeeft.

De EXTRACT() functie kan eenvoudig worden gecombineerd met INTERVAL . Laten we aannemen dat we het interval willen instellen op 5 jaar 8 maanden 23 dagen 08 uur 10 minuten en 20 seconden. Individuele waarden worden geretourneerd door de EXTRACT functie.

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' );

To_TIMESTAMP() gebruiken om een ​​tekenreeks naar een tijdstempel te converteren

U kunt datumwaarden in UTC (Universal Time Coördinator) behouden en de tijdzone indien nodig wijzigen als u de tijdstempel naar een andere tijdzone wilt converteren.

SELECT * FROM pg_timezone_names;

Om de huidige tijdzone te controleren, gebruikt u de SHOW TIMEZONE commando.

U kunt AT TIME ZONE . gebruiken om de uitvoer voor de gekozen tijdzone te ontvangen door de benodigde tijdzonewaarde te selecteren uit de pg_timezone_names tafel.

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

AT TIME ZONE stelt u in staat om verschillende tijdzone-uitgangen te hebben.

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';

Samenvatting

Samenvattend, de PostgreSQL DATE gegevenstype is erg belangrijk en handig bij het opslaan van datums en tijdstempels in tabellen, dus het is vrij gebruikelijk in een relationele database. Het bereik van hun gebruik is ongelooflijk breed, daarom is het zo belangrijk om ze duidelijk te maken voor elke gebruiker in elk land en elke tijdzone. Met verschillende Postgres-functies is het gemakkelijk om aan de behoeften van de gebruikers te voldoen, omdat u datums kunt wijzigen zodat ze in een specifieke tijdzone kunnen worden gebruikt, met een bepaald formaat en andere details die het werken met dergelijke gegevens veel gemakkelijker maken. Tot slot, als u op zoek bent naar een perfecte combinatie van een intuïtieve grafische interface en een uitgebreide opdrachtregel die het werken met de DATE mogelijk maakt gegevenstype nog aangenamer, dbForge Studio voor PostgreSQL zal van pas komen.


  1. Wanneer is het tijd om te upgraden naar SQL?

  2. Dynamische draaitabellen maken in MySQL

  3. Invoegen indien niet bestaat, anders id retourneren in postgresql

  4. Vernieuwen van SQL Server-tabellen met minder onderbrekingen met behulp van Partition Switching