sql >> Database teknologi >  >> RDS >> Sqlserver

Udforskning af Postgres-datoformater og deres forskellige funktioner

I denne artikel vil vi udforske Postgres-datoer, de forskellige datodatatyper, anvendelser og funktioner.

Dato- og tidsstempler er nyttige til dataanalyse og lagring af data for at kontrollere, hvornår en begivenhed rent faktisk fandt sted. For eksempel når du har købs- og salgsordrer, månedlig eller kvartalsvis indtjening med mere. Datoformater varierer på tværs af lande, derfor kan det være en kompliceret opgave for dem, der er nye til databaseadministration og arbejder med datokolonner. Datokolonnens format eller datatype skal altid matche brugerens input. Derudover bør du konvertere datoformatvisningen i henhold til din brugers krav.

Postgres har en række understøttede datatyper. Før du går videre, foreslår jeg, at du henviser til Udforske de forskellige Postgres-datatyper for at forstå disse mere detaljeret.

Postgres DATE datatype

Postgres bruger datatypen DATO til at gemme forskellige datoer i formatet ÅÅÅÅ-MM-DD. Den bruger 4 bytes til at gemme en datoværdi i en kolonne.

  • Laveste dato:4713 f.Kr.
  • Højeste dato:5874897 f.Kr.
  • Datoformat:ÅÅÅÅ-MM-DD (f.eks. 2021-01-01)

Du kan designe en Postgres-tabel med en DATO-kolonne og bruge søgeordet DEFAULT CURRENT_DATE  for at bruge den aktuelle systemdato som standardværdien i denne kolonne.

CREATE TABLE SalesOrders (
Order_id serial PRIMARY KEY,
Orderdetails VARCHAR (255) NOT NULL,
OrderDate DATE NOT NULL DEFAULT CURRENT_DATE
);
INSERT INTO SalesOrders (Orderdetails)
VALUES('Sample Order for customer ABC');

SELECT * FROM SalesOrders;

Som vist nedenfor indsætter SQL en værdi for kolonnen [OrderDate] automatisk med den aktuelle systemdato i formatet ÅÅÅÅ-MM-DD.

Postgres DATE-funktioner

Vi er ofte nødt til at ændre datoformatet eller lave beregninger på eksisterende værdier gemt i Postgres-tabellen. For eksempel i Indien er det sædvanlige datoformat DD-MM-ÅÅÅÅ. Derfor, når en indisk bruger ser dataene, vil vi sandsynligvis have ham til at se data i det format, han er mest bekendt med. I dette tilfælde spiller SQL-funktioner en afgørende rolle.

TO_CHAR() funktion

Denne funktion er nyttig til at give output af en Postgres-datoværdi i et specificeret format. Den accepterer følgende to parametre.

  • Indtastningsdato:Dette er den dato, du vil konvertere til et bestemt format.
  • Datoformat:Det er her, du angiver det nye datoformat.

Følgende forespørgsel konverterer eksisterende datoværdier, der er gemt i tabellen [SalesOrders] til DD-MM-ÅÅÅÅ-format.

SELECT Orderdetails,OrderDate as ExistingDateformat,
to_char(OrderDate,'DD-MM-YYYY') As NewDateFormat FROM SalesOrders;

De understøttede værdier i to_char()-funktionen er som vist nedenfor.

ÅÅÅÅ Årtal med fire cifre
ÅÅÅ Sidste tre cifre i et år
ÅÅ Sidste to cifre i et år
MÅNED Månedens navn med store bogstaver
Måned Månedens navn med det første bogstav med stort
måned Månedens navn med små bogstaver
MAN/man/man Månedsforkortelse med henholdsvis stort stort, første bogstav med stort og alle små bogstaver
MM Månedsnummer (01-12)
DAG/Dag/dag Dagsnavn med stort, henholdsvis første bogstav med stort og alle små bogstaver
DDD Årets dag (001 til 366)
DD Dag i måneden (01 til 31)
D Ugedag (søndag (1) til lørdag (7))
W Ugen i måneden
WW Årets uge

Nogle få eksempler på forskellige datoformater er angivet i følgende SQL.

SELECT Orderdetails,OrderDate as ExistingDateformat,
to_char(OrderDate,'DD-MM-YYYY') As DDMMYYYY,
to_char(OrderDate,'DD-MM-YY') As DDMMYY,
to_char(OrderDate,'DD.MM.YY') As "DD.MM.YY",
to_char(OrderDate,'MM/DD/YYYY') As "MM/DD/YYYY",
to_char(OrderDate,'DAY MM/DD/YYYY') As "MM/DD/YYYY",
to_char(OrderDate,'DDD MM/DD/YYYY') As "DDD MM/DD/YYYY"
FROM SalesOrders

Now()-funktion

Funktionen Now() returnerer det aktuelle systemtidsstempel (dato og klokkeslæt).

Du kan angive dobbeltkolon (::) for at caste en DATETIME-værdi til en DATE-værdi.

Du kan kombinere TO_CHAR() og Now()-funktionen for at konvertere det aktuelle tidsstempel til det angivne format.

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

Minus- og intervaloperator

Du kan bruge minus (-) operatoren til at beregne forskellen mellem to datoer. Forespørgslen nedenfor returnerer f.eks. intervallet mellem det aktuelle tidsstempel og [Ordredato] fra tabellen Salgsordrer.

SELECT Orderdate,now() as currentdate,
now()-Orderdate as Interval FROM SalesOrders
where order_id=2;

Du kan også angive et interval for returnering af datoen efter en specificeret periode. For eksempel giver nedenstående SQL-forespørgsel følgende værdier.

  • For fremtidig dato, angiv intervalværdi 2 timer fra det aktuelle tidsstempel: now() + interval '2 timer'
  • For fremtidig dato skal du angive intervalværdien på 1 dag fra det aktuelle tidsstempel: now() + interval '1 dag'
  • For tidligere dato, angiv intervalværdi et år fra det aktuelle tidsstempel: Now() – interval '1 år'
  • Beregn et år efter datoen ud fra den værdi, der er gemt i kolonnen [Orderdate]: orderdate – interval ‘1 year’
SELECT (NOW() + interval '2 hour') AS twohourslater,
(NOW() + interval '1 day') AS Onedaylater,
(NOW() - interval '1 year') AS OneYearBefore,
(Orderdate- interval '1 year') as Orderdatedifference
from salesorders;

AGE() funktion

Funktionen AGE() returnerer datoforskellen i år, måneder og dage. Du kan bruge denne funktion til at beregne en persons alder.

Denne funktion accepterer to datoparametre og trækker den første datoværdi fra den anden.

Hvis du vender værdierne i ovenstående funktionsscript, returnerer det værdien i negativ.

I et andet eksempel, lad os sige, at nogen har fødselsdatoen 1990-07-01. Derfor kan en persons alder beregnes som nedenfor.

SELECT current_date,
AGE(timestamp '1990-07-01') as EmpAge;

EXTRACT() funktion

Funktionen Extract() returnerer dag, uge, måned, år og kvartal fra den angivne datoværdi.

Udtræk et år

SELECT EXTRACT(YEAR FROM TIMESTAMP '2021-06-28 10:30:15') as year;

Udtræk en måned

SELECT EXTRACT(Month FROM TIMESTAMP '2021-06-28 10:30:15') as Month;

Udtræk en fjerdedel

SELECT EXTRACT(QUARTER FROM TIMESTAMP '2021-06-28 10:30:15') as QUARTER;

Udtrækning af ugedagen

SELECT EXTRACT(DOW FROM TIMESTAMP '2021-06-28 10:30:15') as DOW ;

Udtrækning af årets dag

SELECT EXTRACT(DOY FROM TIMESTAMP '2021-06-28 10:30:15') as DOY ;

Du kan også bruge EXTRACT()-funktionen i kombination med et INTERVAL. For eksempel angiver vi nedenfor intervallet som 7 år 9 måneder 20 dage 09 timer 12 minutter og 13 sekunder. Udtræksfunktionen returnerer de individuelle værdier.

SELECT EXTRACT(YEAR
FROM INTERVAL '7 years 9 months 20 days 09 hours 12 minutes 13 second' ),
EXTRACT(Month
FROM INTERVAL '7 years 9 months 20 days 09 hours 12 minutes 13 second' ),
EXTRACT(Day
FROM INTERVAL '7 years 9 months 20 days 09 hours 12 minutes 13 second' ),
EXTRACT(hour
FROM INTERVAL '7 years 9 months 20 days 09 hours 12 minutes 13 second' ),
EXTRACT(Minute
FROM INTERVAL '7 years 9 months 20 days 09 hours 12 minutes 13 second' );
;

VED TIMEZONE

Nogle gange skal du konvertere tidsstemplet til en anden tidszone. For eksempel kan du gemme datoværdier i UTC (Universal Time Coordinator) og konvertere tidszonen efter behov.

SELECT * FROM pg_timezone_names;

For at kontrollere den aktuelle tidszone, brug VIS TIDZONE som vist nedenfor.

Du kan vælge den påkrævede tidszoneværdi fra pg_timezone_names og bruge AT TIME ZONE for at få output i henhold til den angivne tidszone.

SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'America/Chicago';

På samme måde kan vi få forskellige tidszoneoutput ved at bruge AT TIME ZONE.

SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'America/New_York';

SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'Asia/Qatar';

SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'Europe/Istanbul';

Oversigt

Postgres-datotyper er essentielle og værdifulde, når du gemmer dato- og tidsstempler i næsten alle tabeller i en relationsdatabase. Du har brug for dem til forskellige formål såsom ordreindsættelse eller ved opdatering af tidsstempel, køb og salgsordrer, begivenhedsdetaljer, kunde- og medarbejderoplysninger og mere. Du kan bruge flere Postgres-funktioner til at konvertere en datotype til den påkrævede tidszone, format og specifikke oplysninger for at forenkle udtrækning og analyse af dine data.


  1. 19 Onlineressourcer til at lære om databasedesignfejl

  2. Aktiver SQL Server Agent via SSMS

  3. Brug af ODBC med Salesforce og Active Directory Federation Services (ADFS) Single Sign On (SSO)

  4. Kom godt i gang med SQL Server 2017 på Linux i Azure-portalen