Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erkunden von Postgres-Datumsformaten und ihren verschiedenen Funktionen

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

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.