In diesem Artikel werden wir Postgres-Daten, die verschiedenen Datumsdatentypen, Verwendungen und Funktionen untersuchen.
Datums- und Zeitstempel sind hilfreich für die Datenanalyse und das Speichern von Daten, um zu überprüfen, wann ein Ereignis tatsächlich stattgefunden hat. Zum Beispiel, wenn Sie Kauf- und Verkaufsaufträge, monatliche oder vierteljährliche Einnahmen und mehr haben. Datumsformate variieren von Land zu Land, daher kann es eine komplizierte Aufgabe für diejenigen sein, die neu in der Datenbankverwaltung sind und mit Datumsspalten arbeiten. Das Format oder der Datentyp der Datumsspalte sollte immer mit der Eingabe des Benutzers übereinstimmen. Außerdem sollten Sie die Anzeige des Datumsformats gemäß den Anforderungen Ihres Benutzers konvertieren.
Postgres hat eine Vielzahl von unterstützten Datentypen. Bevor Sie fortfahren, schlage ich vor, dass Sie sich auf Erkunden der verschiedenen Postgres-Datentypen beziehen, um diese im Detail zu verstehen.
Postgres-Datentyp DATE
Postgres verwendet den Datentyp DATE zum Speichern verschiedener Datumsangaben im Format YYYY-MM-DD. Es verwendet 4 Bytes zum Speichern eines Datumswerts in einer Spalte.
- Niedrigstes Datum:4713 v. Chr.
- Höchstes Datum:5874897 v. Chr.
- Datumsformat:JJJJ-MM-TT (Bsp. 2021-01-01)
Sie können eine Postgres-Tabelle mit einer DATE-Spalte entwerfen und das Schlüsselwort DEFAULT verwenden CURRENT_DATE um das aktuelle Systemdatum als Standardwert in dieser Spalte zu verwenden.
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;
Wie unten gezeigt, fügt die SQL automatisch einen Wert für die Spalte [OrderDate] mit dem aktuellen Systemdatum im Format YYYY-MM-DD ein.
Postgres DATE-Funktionen
Wir müssen oft das Datumsformat ändern oder Berechnungen mit vorhandenen Werten durchführen, die in der Postgres-Tabelle gespeichert sind. In Indien ist das übliche Datumsformat beispielsweise TT-MM-JJJJ. Wenn ein indischer Benutzer die Daten anzeigt, möchten wir daher wahrscheinlich, dass er die Daten in dem Format anzeigt, mit dem er am vertrautesten ist. In diesem Fall spielen SQL-Funktionen eine entscheidende Rolle.
TO_CHAR()-Funktion
Diese Funktion ist hilfreich, um die Ausgabe eines Postgres-Datumswerts in einem bestimmten Format zu geben. Es akzeptiert die folgenden zwei Parameter.
- Eingabedatum:Dies ist das Datum, das Sie in ein bestimmtes Format konvertieren möchten.
- Datumsformat:Hier legen Sie das neue Datumsformat fest.
Die folgende Abfrage konvertiert vorhandene Datumswerte, die in der Tabelle [SalesOrders] gespeichert sind, in das Format TT-MM-JJJJ.
SELECT Orderdetails,OrderDate as ExistingDateformat, to_char(OrderDate,'DD-MM-YYYY') As NewDateFormat FROM SalesOrders;
Die unterstützten Werte in der to_char()-Funktion sind wie unten gezeigt.
JJJJ | Jahr in vier Ziffern |
JJJ | Letzte drei Ziffern eines Jahres |
JJ | Letzte zwei Ziffern eines Jahres |
MONAT | Monatsname in Großbuchstaben |
Monat | Monatsname mit großem Anfangsbuchstaben |
Monat | Monatsname in Kleinbuchstaben |
MON/Mon/Mon | Monatsabkürzung in Großbuchstaben, Anfangsbuchstaben groß bzw. Kleinbuchstaben |
MM | Monatsnummer (01-12) |
TAG/Tag/Tag | Tagesname in Großbuchstaben, Anfangsbuchstaben groß bzw. Kleinbuchstaben |
DDD | Tag des Jahres (001 bis 366) |
DD | Tag des Monats (01 bis 31) |
D | Wochentag (Sonntag (1) bis Samstag (7)) |
W | Woche des Monats |
WW | Woche des Jahres |
Einige Beispiele für verschiedene Datumsformate sind in der folgenden SQL angegeben.
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
Die Funktion Now() gibt den aktuellen Systemzeitstempel (Datum und Uhrzeit) zurück.
Sie können doppelte Doppelpunkte (::) angeben, um einen DATETIME-Wert in einen DATE-Wert umzuwandeln.
Sie können TO_CHAR() und die Now()-Funktion kombinieren, um den aktuellen Zeitstempel in das angegebene Format zu konvertieren.
SELECT TO_CHAR(NOW() :: DATE, 'dd-mm-yyyy');
Minus- und Intervalloperator
Sie können den Minusoperator (-) verwenden, um die Differenz zwischen zwei Daten zu berechnen. Die folgende Abfrage gibt beispielsweise das Intervall zwischen dem aktuellen Zeitstempel und dem [Bestelldatum] aus der Tabelle „SalesOrders“ zurück.
SELECT Orderdate,now() as currentdate, now()-Orderdate as Interval FROM SalesOrders where order_id=2;
Sie können auch ein Intervall für die Rückgabe des Datums nach einem bestimmten Zeitraum angeben. Die folgende SQL-Abfrage gibt beispielsweise die folgenden Werte zurück.
- Geben Sie für zukünftiges Datum einen Intervallwert von 2 Stunden ab dem aktuellen Zeitstempel an: now() + interval '2 hour'
- Geben Sie für ein Datum in der Zukunft einen Intervallwert von 1 Tag ab dem aktuellen Zeitstempel an: now() + interval '1 day'
- Geben Sie für vergangenes Datum den Intervallwert ein Jahr ab dem aktuellen Zeitstempel an: Now() – Intervall „1 Jahr“
- Ein Jahr nach dem Datum aus dem in der Spalte [Bestelldatum] gespeicherten Wert berechnen: Bestelldatum – Intervall „1 Jahr“
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
Die Funktion AGE() gibt die Datumsdifferenz in Jahren, Monaten und Tagen zurück. Mit dieser Funktion können Sie das Alter einer Person berechnen.
Diese Funktion akzeptiert zwei Datumsparameter und subtrahiert den ersten Datumswert vom zweiten.
Wenn Sie die Werte im obigen Funktionsskript umkehren, gibt es den negativen Wert zurück.
Nehmen wir in einem anderen Beispiel an, jemand hat das Geburtsdatum 1990-07-01. Daher kann das Alter einer Person wie folgt berechnet werden.
SELECT current_date, AGE(timestamp '1990-07-01') as EmpAge;
EXTRACT()-Funktion
Die Extract()-Funktion gibt den Tag, die Woche, den Monat, das Jahr und das Quartal aus dem angegebenen Datumswert zurück.
Ein Jahr extrahieren
SELECT EXTRACT(YEAR FROM TIMESTAMP '2021-06-28 10:30:15') as year;
Einen Monat extrahieren
SELECT EXTRACT(Month FROM TIMESTAMP '2021-06-28 10:30:15') as Month;
Extrahiere ein Viertel
SELECT EXTRACT(QUARTER FROM TIMESTAMP '2021-06-28 10:30:15') as QUARTER;
Wochentag extrahieren
SELECT EXTRACT(DOW FROM TIMESTAMP '2021-06-28 10:30:15') as DOW ;
Tag des Jahres extrahieren
SELECT EXTRACT(DOY FROM TIMESTAMP '2021-06-28 10:30:15') as DOY ;
Sie können die Funktion EXTRACT() auch in Kombination mit einem INTERVAL verwenden. Zum Beispiel geben wir unten das Intervall als 7 Jahre 9 Monate 20 Tage 09 Stunden 12 Minuten und 13 Sekunden an. Die Extract-Funktion gibt die einzelnen Werte zurück.
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 DER ZEITZONE
Manchmal müssen Sie den Zeitstempel in eine andere Zeitzone konvertieren. Beispielsweise können Sie Datumswerte in UTC (Universal Time Coordinator) speichern und die Zeitzone nach Bedarf konvertieren.
SELECT * FROM pg_timezone_names;
Um die aktuelle Zeitzone zu überprüfen, verwenden Sie SHOW TIMEZONE wie unten gezeigt.
Sie können den erforderlichen Zeitzonenwert aus pg_timezone_names auswählen und AT TIME ZONE verwenden, um die Ausgabe für die angegebene Zeitzone zu erhalten.
SELECT '2021-06-28 07:09:19'::timestamp AT TIME ZONE 'America/Chicago';
In ähnlicher Weise können wir mit AT TIME ZONE.
verschiedene Zeitzonenausgaben erhaltenSELECT '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';
Zusammenfassung
Postgres-Datumstypen sind unerlässlich und wertvoll beim Speichern von Datums- und Zeitstempeln in fast jeder Tabelle einer relationalen Datenbank. Sie benötigen sie für verschiedene Zwecke, z. B. zum Einfügen von Bestellungen oder zum Aktualisieren von Zeitstempeln, Einkäufen und Verkaufsaufträgen, Ereignisdetails, Kunden- und Mitarbeiterinformationen und mehr. Sie können mehrere Postgres-Funktionen verwenden, um einen Datumstyp in die erforderliche Zeitzone, das Format und spezifische Informationen zu konvertieren, um die Extraktion und Analyse Ihrer Daten zu vereinfachen.