sql >> Database >  >> RDS >> Sqlserver

Postgres-datumnotaties en hun verschillende functies verkennen

In dit artikel gaan we in op Postgres-datums, de verschillende soorten datumgegevens, het gebruik en de functies.

Datum- en tijdstempels zijn handig voor gegevensanalyse en het opslaan van gegevens om te controleren wanneer een gebeurtenis daadwerkelijk heeft plaatsgevonden. Bijvoorbeeld wanneer u inkoop- en verkooporders, maand- of kwartaalinkomsten en meer heeft. Datumnotaties verschillen van land tot land, daarom kan het een ingewikkelde taak zijn voor mensen die nieuw zijn in databasebeheer en werken met datumkolommen. Het formaat of gegevenstype van de datumkolom moet altijd overeenkomen met de invoer van de gebruiker. Bovendien moet u de weergave van de datumnotatie converteren volgens de vereisten van uw gebruiker.

Postgres heeft verschillende ondersteunde gegevenstypen. Voordat u verder gaat, raad ik u aan de verschillende Postgres-gegevenstypen verkennen te raadplegen om deze in meer detail te begrijpen.

Postgres DATE-gegevenstype

Postgres gebruikt het gegevenstype DATE voor het opslaan van verschillende datums in de indeling JJJJ-MM-DD. Het gebruikt 4 bytes voor het opslaan van een datumwaarde in een kolom.

  • Laagste datum:4713 v.Chr.
  • Hoogste datum:5874897 v.Chr.
  • Datumnotatie:JJJJ-MM-DD (bijv. 2021-01-01)

U kunt een Postgres-tabel ontwerpen met een DATE-kolom en het zoekwoord DEFAULT gebruiken CURRENT_DATE  om de huidige systeemdatum als standaardwaarde in deze kolom te gebruiken.

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;

Zoals hieronder wordt weergegeven, voegt de SQL automatisch een waarde in voor de [OrderDate]-kolom met de huidige systeemdatum in de indeling JJJJ-MM-DD.

Postgres DATE-functies

We moeten vaak het datumformaat wijzigen of berekeningen uitvoeren op bestaande waarden die zijn opgeslagen in de Postgres-tabel. In India is het gebruikelijke datumformaat bijvoorbeeld DD-MM-YYYY. Daarom, wanneer een Indiase gebruiker de gegevens bekijkt, willen we waarschijnlijk dat hij de gegevens bekijkt in het formaat waarmee hij het meest vertrouwd is. In dit geval speelt SQL Functions een cruciale rol.

TO_CHAR() functie

Deze functie is handig om de uitvoer van een Postgres-datumwaarde in een gespecificeerd formaat te geven. Het accepteert de volgende twee parameters.

  • Datum invoeren:dit is de datum die u naar een specifiek formaat wilt converteren.
  • Datumformaat:hier specificeert u het nieuwe datumformaat.

De volgende query converteert bestaande datumwaarden die zijn opgeslagen in de tabel [SalesOrders] naar de indeling DD-MM-YYYY.

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

De ondersteunde waarden in de to_char() functie zijn zoals hieronder getoond.

JJJJ Jaar in vier cijfers
JJJ Laatste drie cijfers van een jaar
JJ Laatste twee cijfers van een jaar
MAAND Maandnaam in hoofdletters
Maand Maandnaam met de eerste letter als hoofdletter
maand Maandnaam in kleine letters
MA/ma/ma Afkorting van de maand in hoofdletters, eerste letter met hoofdletter en alle kleine letters, respectievelijk
MM Maandnummer (01-12)
DAG/Dag/dag Dagnaam in hoofdletters, eerste letter met hoofdletter en alle kleine letters, respectievelijk
DDD Dag van het jaar (001 tot 366)
DD Dag van de maand (01 tot 31)
D Dag van de week (zondag (1) tot zaterdag (7))
B Week van de maand
WW Week van het jaar

Een paar voorbeelden van verschillende datumnotaties worden gespecificeerd in de volgende 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()-functie

De functie Now() retourneert de huidige systeemtijdstempel (datum en tijd).

U kunt dubbele dubbele punten (::) specificeren om een ​​DATETIME-waarde naar een DATE-waarde te casten.

U kunt TO_CHAR() en de Now()-functie combineren om de huidige tijdstempel naar het opgegeven formaat te converteren.

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

Minus- en intervaloperator

U kunt de min-operator (-) gebruiken om het verschil tussen twee datums te berekenen. De onderstaande query retourneert bijvoorbeeld het interval tussen de huidige tijdstempel en [Orderdatum] uit de tabel SalesOrders.

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

U kunt ook een interval specificeren voor het retourneren van de datum na een bepaalde periode. De onderstaande SQL-query geeft bijvoorbeeld de volgende waarden.

  • Geef voor toekomstige datum de intervalwaarde op 2 uur vanaf de huidige tijdstempel: now() + interval '2 uur'
  • Geef voor toekomstige datum een ​​intervalwaarde van 1 dag vanaf het huidige tijdstempel op: now() + interval '1 dag'
  • Geef voor een datum in het verleden de intervalwaarde op één jaar vanaf de huidige tijdstempel op: Now() – interval '1 jaar'
  • Bereken een jaar na de datum op basis van de waarde die is opgeslagen in de kolom [Besteldatum]: besteldatum – interval '1 jaar'
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() functie

De functie AGE() retourneert het datumverschil in jaren, maanden en dagen. U kunt deze functie gebruiken om de leeftijd van een persoon te berekenen.

Deze functie accepteert twee datumparameters en trekt de eerste datumwaarde af van de tweede.

Als u de waarden in het bovenstaande functiescript omkeert, wordt de waarde negatief geretourneerd.

Laten we in een ander voorbeeld zeggen dat iemand een geboortedatum heeft van 1990-07-01. Daarom kan de leeftijd van een persoon als volgt worden berekend.

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

EXTRACT() functie

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

Een jaar extraheren

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

Een maand extraheren

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

Een kwartaal extraheren

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

De dag van de week extraheren

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

De dag van het jaar extraheren

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

U kunt de functie EXTRACT() ook gebruiken in combinatie met een INTERVAL. Hieronder specificeren we het interval bijvoorbeeld als 7 jaar 9 maand 20 dagen 09 uur 12 minuten en 13 seconden. De extract-functie retourneert de individuele waarden.

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

IN TIJDZONE

Soms moet u de tijdstempel converteren naar een andere tijdzone. U kunt bijvoorbeeld datumwaarden opslaan in UTC (Universele tijdcoördinator) en de tijdzone naar behoefte converteren.

SELECT * FROM pg_timezone_names;

Om de huidige tijdzone te controleren, gebruik TOON TIJDZONE zoals hieronder getoond.

U kunt de vereiste tijdzonewaarde kiezen uit de pg_timezone_names en AT TIME ZONE gebruiken om de uitvoer per opgegeven tijdzone te krijgen.

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

Op dezelfde manier kunnen we verschillende tijdzone-uitgangen krijgen met 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';

Samenvatting

Postgres-datumtypen zijn essentieel en waardevol bij het opslaan van datum- en tijdstempels in bijna elke tabel van een relationele database. Je hebt ze nodig voor verschillende doeleinden, zoals het invoegen van bestellingen of bij het bijwerken van tijdstempels, in- en verkooporders, evenementdetails, klant- en werknemersinformatie en meer. U kunt meerdere Postgres-functies gebruiken om een ​​datumtype om te zetten in de vereiste tijdzone, indeling en specifieke informatie om de extractie en analyse van uw gegevens te vereenvoudigen.


  1. Converteer NULL-waarden naar de standaardwaarde van de kolom bij het invoegen van gegevens in SQLite

  2. Query om zowel de cumulatieve als de totale SUM over het salaris te berekenen

  3. Bestaande tabel verplaatsen van primaire bestandsgroep naar andere bestandsgroep

  4. Oracle:Zoeken in volledige tekst met voorwaarde