PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Funktionsweise von date_trunc() in PostgreSQL

In PostgreSQL das date_trunc() Funktion kürzt einen Datums-/Uhrzeitwert auf eine angegebene Genauigkeit.

Es kann den Wert auch auf eine bestimmte Genauigkeit in einer bestimmten Zeitzone kürzen.

Sie können es sich als Datumsversion von trunc() vorstellen Funktion (die Zahlen abschneidet).

Syntax

Die Syntax lautet wie folgt:

date_trunc(field, source [, time_zone ])

Wo:

  • field ist die Genauigkeit, für die der Eingabewert gekürzt werden soll (z. B. month , hour , etc). Unten finden Sie eine vollständige Liste der akzeptablen Werte für dieses Argument.
  • source ist ein Wertausdruck vom Typ timestamp , Zeitstempel mit Zeitzone , oder Intervall . Beachten Sie, dass Werte vom Typ date und Zeit werden automatisch in timestamp gecastet oder Intervall bzw. .
  • Die optionale time_zone Argument kann angegeben werden, um eine andere Zeitzone anzugeben.

Das field argument kann eines der folgenden sein:

  • Mikrosekunden
  • Millisekunden
  • Sekunde
  • Minute
  • Stunde
  • Tag
  • Woche
  • Monat
  • Quartal
  • Jahr
  • Jahrzehnt
  • Jahrhundert
  • Jahrtausend

Einfaches Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

SELECT date_trunc('hour', timestamp '2020-06-30 17:29:31');

Ergebnis:

2020-06-30 17:00:00

Wir können sehen, dass der Zeitteil des Datums von 17:29:31 abgeschnitten wurde bis 17:00:00 . Das liegt daran, dass ich hour verwendet habe für das erste Argument.

Hier ist es mit unterschiedlichen Werten für das erste Argument.

\x
SELECT 
  date_trunc('minute', timestamp '2020-06-30 17:29:31'),
  date_trunc('day', timestamp '2020-06-30 17:29:31'),
  date_trunc('month', timestamp '2020-06-30 17:29:31'),
  date_trunc('year', timestamp '2020-06-30 17:29:31');

Ergebnis (bei vertikaler Ausgabe):

date_trunc | 2020-06-30 17:29:00
date_trunc | 2020-06-30 00:00:00
date_trunc | 2020-06-01 00:00:00
date_trunc | 2020-01-01 00:00:00

In diesem Fall habe ich \x verwendet um eine erweiterte Anzeige/vertikale Ausgabe zu ermöglichen, damit die Ergebnisse besser lesbar sind.

Mit Zeitzone

Hier ist ein Beispiel zur Veranschaulichung von WITH TIME ZONE Option.

SELECT 
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+00'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+01');

Ergebnis:

date_trunc | 2020-07-01 03:00:00+10
date_trunc | 2020-07-01 02:00:00+10

Als ich diese Beispiele ausführte, war die lokale Zeitzone Australia/Brisbane.

Sie können auch den vollständigen Zeitzonennamen als drittes Argument hinzufügen.

SELECT 
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland'),
date_trunc('hour', timestamp with time zone '2020-06-30 17:29:31+12', 'Pacific/Auckland');

Ergebnis:

date_trunc | 2020-06-30 15:00:00+10
date_trunc | 2020-06-30 15:00:00+10

Mit Intervall

Hier ist ein Beispiel, das einen Intervallwert anstelle eines Datums verwendet.

SELECT date_trunc('hour', interval '7 days 5 hours 15 minutes');

Ergebnis:

7 days, 5:00:00