Zum Inhalt springen

Zeitstempel-Funktionen

Dieser Abschnitt beschreibt Funktionen und Operatoren zum Untersuchen und Manipulieren von TIMESTAMP-Werten. Siehe auch die verwandten TIMESTAMPTZ-Funktionen.

Zeitstempel-Operatoren

Die folgende Tabelle zeigt die verfügbaren mathematischen Operatoren für den Typ TIMESTAMP.

Operator Beschreibung Beispiel Ergebnis
+ Addition eines INTERVAL TIMESTAMP '1992-03-22 01:02:03' + INTERVAL 5 DAY 1992-03-27 01:02:03
- Subtraktion von TIMESTAMPs TIMESTAMP '1992-03-27' - TIMESTAMP '1992-03-22' 5 days
- Subtraktion eines INTERVAL TIMESTAMP '1992-03-27 01:02:03' - INTERVAL 5 DAY 1992-03-22 01:02:03

Addition zu oder Subtraktion von unendlichen Werten liefert denselben unendlichen Wert.

Skalare Zeitstempel-Funktionen

Die folgende Tabelle zeigt die verfügbaren skalaren Funktionen für TIMESTAMP-Werte.

Name Beschreibung
age(timestamp, timestamp) Subtrahiert die Argumente und liefert die Zeitdifferenz zwischen den beiden Zeitstempeln.
age(timestamp) Subtrahiert vom current_date.
ago(interval) Subtrahiert ein Intervall vom aktuellen Zeitstempel.
century(timestamp) Extrahiert das Jahrhundert eines Zeitstempels.
current_localtimestamp() Gibt den aktuellen Zeitstempel zurück (zum Beginn der Transaktion).
date_diff(part, starttimestamp, endtimestamp) Die Anzahl der part-Grenzen zwischen starttimestamp und endtimestamp, einschließlich des größeren und ausschließlich des kleineren Zeitstempels.
date_part([part, ...], timestamp) Holt die aufgeführten Teilfelder als struct. Die Liste muss konstant sein.
date_part(part, timestamp) Teilfeld holen (entspricht extract).
date_sub(part, starttimestamp, endtimestamp) Die vorzeichenbehaftete Länge des Intervalls zwischen starttimestamp und endtimestamp, auf ganze Vielfache von part gekürzt.
date_trunc(part, timestamp) Auf die angegebene Genauigkeit kürzen.
dayname(timestamp) Der (englische) Name des Wochentags.
epoch_ms(timestamp) Gibt die Gesamtzahl der Millisekunden seit der Epoche zurück.
epoch_ns(timestamp) Gibt die Gesamtzahl der Nanosekunden seit der Epoche zurück.
epoch_us(timestamp) Gibt die Gesamtzahl der Mikrosekunden seit der Epoche zurück.
epoch(timestamp) Gibt die Gesamtzahl der Sekunden seit der Epoche zurück.
extract(field FROM timestamp) Teilfeld aus einem Zeitstempel holen.
greatest(timestamp, timestamp) Der spätere der beiden Zeitstempel.
isfinite(timestamp) Gibt true zurück, wenn der Zeitstempel endlich ist, sonst false.
isinf(timestamp) Gibt true zurück, wenn der Zeitstempel unendlich ist, sonst false.
julian(timestamp) Extrahiert die Julianische Tageszahl aus einem Zeitstempel.
last_day(timestamp) Der letzte Tag des Monats.
least(timestamp, timestamp) Der frühere der beiden Zeitstempel.
make_timestamp(bigint, bigint, bigint, bigint, bigint, double) Der Zeitstempel für die angegebenen Teile.
make_timestamp(microseconds) Wandelt Mikrosekunden seit der Epoche in einen Zeitstempel um.
make_timestamp_ms(milliseconds) Wandelt Millisekunden seit der Epoche in einen Zeitstempel um.
make_timestamp_ns(nanoseconds) Wandelt Nanosekunden seit der Epoche in einen Zeitstempel um.
monthname(timestamp) Der (englische) Name des Monats.
strftime(timestamp, format) Wandelt den Zeitstempel gemäß dem Formatstring in eine Zeichenkette um.
strptime(text, format-list) Wandelt die Zeichenkette text in einen Zeitstempel um, indem die Formatstrings in der Liste nacheinander angewendet werden, bis einer gelingt. Wirft bei Misserfolg einen Fehler. Um bei Misserfolg NULL zurückzugeben, verwenden Sie try_strptime.
strptime(text, format) Wandelt die Zeichenkette text gemäß dem Formatstring in einen Zeitstempel um. Wirft bei Misserfolg einen Fehler. Um bei Misserfolg NULL zurückzugeben, verwenden Sie try_strptime.
time_bucket(bucket_width, timestamp[, offset]) Kürzt timestamp auf ein Raster der Breite bucket_width. Das Raster ist bei 2000-01-01 00:00:00[ + offset] verankert, wenn bucket_width eine Anzahl von Monaten oder gröberen Einheiten ist, sonst bei 2000-01-03 00:00:00[ + offset]. Beachten Sie, dass 2000-01-03 ein Montag ist.
time_bucket(bucket_width, timestamp[, origin]) Kürzt timestamp auf ein Raster der Breite bucket_width. Das Raster ist am Zeitstempel origin verankert, der standardmäßig 2000-01-01 00:00:00 ist, wenn bucket_width eine Anzahl von Monaten oder gröberen Einheiten ist, sonst 2000-01-03 00:00:00. Beachten Sie, dass 2000-01-03 ein Montag ist.
try_strptime(text, format-list) Wandelt die Zeichenkette text in einen Zeitstempel um, indem die Formatstrings in der Liste nacheinander angewendet werden, bis einer gelingt. Gibt bei Misserfolg NULL zurück.
try_strptime(text, format) Wandelt die Zeichenkette text gemäß dem Formatstring in einen Zeitstempel um. Gibt bei Misserfolg NULL zurück.

Es gibt außerdem eigene Extraktionsfunktionen für die Teilfelder.

Auf unendliche Daten angewendete Funktionen geben entweder dieselben unendlichen Daten zurück (z. B. greatest) oder NULL (z. B. date_part), je nachdem, was „Sinn ergibt“. Muss die Funktion die Teile des unendlichen Datums untersuchen, ist das Ergebnis in der Regel NULL.

age(timestamp, timestamp)

| Beschreibung | Subtrahiert die Argumente und liefert die Zeitdifferenz zwischen den beiden Zeitstempeln. | | Beispiel | age(TIMESTAMP '2001-04-10', TIMESTAMP '1992-09-20') | | Ergebnis | 8 years 6 months 20 days |

age(timestamp)

| Beschreibung | Subtrahiert vom current_date. | | Beispiel | age(TIMESTAMP '1992-09-20') | | Ergebnis | 29 years 1 month 27 days 12:39:00.844 |

ago(interval)

| Beschreibung | Subtrahiert ein Intervall vom aktuellen Zeitstempel und gibt einen Zeitstempel in der Vergangenheit zurück. Entspricht current_timestamp - interval. | | Beispiel | ago(INTERVAL 1 HOUR) | | Ergebnis | 2024-11-30 12:28:48.895 (wenn die aktuelle Zeit 2024-11-30 13:28:48.895 ist) |

century(timestamp)

| Beschreibung | Extrahiert das Jahrhundert eines Zeitstempels. | | Beispiel | century(TIMESTAMP '1992-03-22') | | Ergebnis | 20 |

current_localtimestamp()

| Beschreibung | Gibt den aktuellen Zeitstempel mit Zeitzone zurück (zum Beginn der Transaktion). | | Beispiel | current_localtimestamp() | | Ergebnis | 2024-11-30 13:28:48.895 |

date_diff(part, starttimestamp, endtimestamp)

| Beschreibung | Die vorzeichenbehaftete Anzahl der part-Grenzen zwischen starttimestamp und endtimestamp, einschließlich des größeren und ausschließlich des kleineren Zeitstempels. | | Beispiel | date_diff('hour', TIMESTAMP '1992-09-30 23:59:59', TIMESTAMP '1992-10-01 01:58:00') | | Ergebnis | 2 |

date_part([part, ...], timestamp)

| Beschreibung | Holt die aufgeführten Teilfelder als struct. Die Liste muss konstant sein. | | Beispiel | date_part(['year', 'month', 'day'], TIMESTAMP '1992-09-20 20:38:40') | | Ergebnis | {year: 1992, month: 9, day: 20} |

date_part(part, timestamp)

| Beschreibung | Teilfeld holen (entspricht extract). | | Beispiel | date_part('minute', TIMESTAMP '1992-09-20 20:38:40') | | Ergebnis | 38 |

date_sub(part, starttimestamp, endtimestamp)

| Beschreibung | Die vorzeichenbehaftete Länge des Intervalls zwischen starttimestamp und endtimestamp, auf ganze Vielfache von part gekürzt. | | Beispiel | date_sub('hour', TIMESTAMP '1992-09-30 23:59:59', TIMESTAMP '1992-10-01 01:58:00') | | Ergebnis | 1 |

date_trunc(part, timestamp)

| Beschreibung | Auf die angegebene Genauigkeit kürzen. | | Beispiel | date_trunc('hour', TIMESTAMP '1992-09-20 20:38:40') | | Ergebnis | 1992-09-20 20:00:00 |

dayname(timestamp)

| Beschreibung | Der (englische) Name des Wochentags. | | Beispiel | dayname(TIMESTAMP '1992-03-22') | | Ergebnis | Sunday |

epoch_ms(timestamp)

| Beschreibung | Gibt die Gesamtzahl der Millisekunden seit der Epoche zurück. | | Beispiel | epoch_ms(TIMESTAMP '2021-08-03 11:59:44.123456') | | Ergebnis | 1627991984123 |

epoch_ns(timestamp)

| Beschreibung | Gibt die Gesamtzahl der Nanosekunden seit der Epoche zurück. | | Beispiel | epoch_ns(TIMESTAMP '2021-08-03 11:59:44.123456') | | Ergebnis | 1627991984123456000 |

epoch_us(timestamp)

| Beschreibung | Gibt die Gesamtzahl der Mikrosekunden seit der Epoche zurück. | | Beispiel | epoch_us(TIMESTAMP '2021-08-03 11:59:44.123456') | | Ergebnis | 1627991984123456 |

epoch(timestamp)

| Beschreibung | Gibt die Gesamtzahl der Sekunden seit der Epoche zurück. | | Beispiel | epoch('2022-11-07 08:43:04'::TIMESTAMP) | | Ergebnis | 1667810584.0 |

Im Gegensatz zu epoch_ms, epoch_us und epoch_ns, die BIGINT zurückgeben, gibt epoch ein DOUBLE zurück und behält daher die Subsekundengenauigkeit.

extract(field FROM timestamp)

| Beschreibung | Teilfeld aus einem Zeitstempel holen. | | Beispiel | extract('hour' FROM TIMESTAMP '1992-09-20 20:38:48') | | Ergebnis | 20 |

greatest(timestamp, timestamp)

| Beschreibung | Der spätere der beiden Zeitstempel. | | Beispiel | greatest(TIMESTAMP '1992-09-20 20:38:48', TIMESTAMP '1992-03-22 01:02:03.1234') | | Ergebnis | 1992-09-20 20:38:48 |

isfinite(timestamp)

| Beschreibung | Gibt true zurück, wenn der Zeitstempel endlich ist, sonst false. | | Beispiel | isfinite(TIMESTAMP '1992-03-07') | | Ergebnis | true |

isinf(timestamp)

| Beschreibung | Gibt true zurück, wenn der Zeitstempel unendlich ist, sonst false. | | Beispiel | isinf(TIMESTAMP '-infinity') | | Ergebnis | true |

julian(timestamp)

| Beschreibung | Extrahiert die Julianische Tageszahl aus einem Zeitstempel. | | Beispiel | julian(TIMESTAMP '1992-03-22 01:02:03.1234') | | Ergebnis | 2448704.043091706 |

last_day(timestamp)

| Beschreibung | Der letzte Tag des Monats. | | Beispiel | last_day(TIMESTAMP '1992-03-22 01:02:03.1234') | | Ergebnis | 1992-03-31 |

least(timestamp, timestamp)

| Beschreibung | Der frühere der beiden Zeitstempel. | | Beispiel | least(TIMESTAMP '1992-09-20 20:38:48', TIMESTAMP '1992-03-22 01:02:03.1234') | | Ergebnis | 1992-03-22 01:02:03.1234 |

make_timestamp(bigint, bigint, bigint, bigint, bigint, double)

| Beschreibung | Der Zeitstempel für die angegebenen Teile. | | Beispiel | make_timestamp(1992, 9, 20, 13, 34, 27.123456) | | Ergebnis | 1992-09-20 13:34:27.123456 |

make_timestamp(microseconds)

| Beschreibung | Wandelt Mikrosekunden seit der Epoche in einen Zeitstempel um. | | Beispiel | make_timestamp(1667810584123456) | | Ergebnis | 2022-11-07 08:43:04.123456 |

make_timestamp_ms(milliseconds)

| Beschreibung | Wandelt Millisekunden seit der Epoche in einen Zeitstempel um. | | Beispiel | make_timestamp_ms(1667810584123) | | Ergebnis | 2022-11-07 08:43:04.123 |

make_timestamp_ns(nanoseconds)

| Beschreibung | Wandelt Nanosekunden seit der Epoche in einen Zeitstempel um. | | Beispiel | make_timestamp_ns(1667810584123456789) | | Ergebnis | 2022-11-07 08:43:04.123456789 |

monthname(timestamp)

| Beschreibung | Der (englische) Name des Monats. | | Beispiel | monthname(TIMESTAMP '1992-09-20') | | Ergebnis | September |

strftime(timestamp, format)

| Beschreibung | Wandelt den Zeitstempel gemäß dem Formatstring in eine Zeichenkette um. | | Beispiel | strftime(timestamp '1992-01-01 20:38:40', '%a, %-d %B %Y - %I:%M:%S %p') | | Ergebnis | Wed, 1 January 1992 - 08:38:40 PM |

strptime(text, format-list)

| Beschreibung | Wandelt die Zeichenkette text in einen Zeitstempel um, indem die Formatstrings in der Liste nacheinander angewendet werden, bis einer gelingt. Wirft bei Misserfolg einen Fehler. Um bei Misserfolg NULL zurückzugeben, verwenden Sie try_strptime. | | Beispiel | strptime('4/15/2023 10:56:00', ['%d/%m/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S']) | | Ergebnis | 2023-04-15 10:56:00 |

strptime(text, format)

| Beschreibung | Wandelt die Zeichenkette text gemäß dem Formatstring in einen Zeitstempel um. Wirft bei Misserfolg einen Fehler. Um bei Misserfolg NULL zurückzugeben, verwenden Sie try_strptime. | | Beispiel | strptime('Wed, 1 January 1992 - 08:38:40 PM', '%a, %-d %B %Y - %I:%M:%S %p') | | Ergebnis | 1992-01-01 20:38:40 |

time_bucket(bucket_width, timestamp[, offset])

| Beschreibung | Kürzt timestamp auf ein Raster der Breite bucket_width. Das Raster enthält 2000-01-01 00:00:00[ + offset], wenn bucket_width eine Anzahl von Monaten oder gröberen Einheiten ist, sonst 2000-01-03 00:00:00[ + offset]. Beachten Sie, dass 2000-01-03 ein Montag ist. | | Beispiel | time_bucket(INTERVAL '10 minutes', TIMESTAMP '1992-04-20 15:26:00-07', INTERVAL '5 minutes') | | Ergebnis | 1992-04-20 15:25:00 |

time_bucket(bucket_width, timestamp[, origin])

| Beschreibung | Kürzt timestamp auf ein Raster der Breite bucket_width. Das Raster enthält den Zeitstempel origin, der standardmäßig 2000-01-01 00:00:00 ist, wenn bucket_width eine Anzahl von Monaten oder gröberen Einheiten ist, sonst 2000-01-03 00:00:00. Beachten Sie, dass 2000-01-03 ein Montag ist. | | Beispiel | time_bucket(INTERVAL '2 weeks', TIMESTAMP '1992-04-20 15:26:00', TIMESTAMP '1992-04-01 00:00:00') | | Ergebnis | 1992-04-15 00:00:00 |

try_strptime(text, format-list)

| Beschreibung | Wandelt die Zeichenkette text in einen Zeitstempel um, indem die Formatstrings in der Liste nacheinander angewendet werden, bis einer gelingt. Gibt bei Misserfolg NULL zurück. | | Beispiel | try_strptime('4/15/2023 10:56:00', ['%d/%m/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S']) | | Ergebnis | 2023-04-15 10:56:00 |

try_strptime(text, format)

| Beschreibung | Wandelt die Zeichenkette text gemäß dem Formatstring in einen Zeitstempel um. Gibt bei Misserfolg NULL zurück. | | Beispiel | try_strptime('Wed, 1 January 1992 - 08:38:40 PM', '%a, %-d %B %Y - %I:%M:%S %p') | | Ergebnis | 1992-01-01 20:38:40 |

Zeitstempel-Tabellenfunktionen

Die folgende Tabelle zeigt die verfügbaren Tabellenfunktionen für den Typ TIMESTAMP.

Name Beschreibung
generate_series(timestamp, timestamp, interval) Erzeugt eine Tabelle von Zeitstempeln im geschlossenen Bereich, in Schritten des Intervalls.
range(timestamp, timestamp, interval) Erzeugt eine Tabelle von Zeitstempeln im halboffenen Bereich, in Schritten des Intervalls.

Unendliche Werte sind als Grenzen von Tabellenfunktionen nicht erlaubt.

generate_series(timestamp, timestamp, interval)

| Beschreibung | Erzeugt eine Tabelle von Zeitstempeln im geschlossenen Bereich, in Schritten des Intervalls. | | Beispiel | generate_series(TIMESTAMP '2001-04-10', TIMESTAMP '2001-04-11', INTERVAL 30 MINUTE) |

range(timestamp, timestamp, interval)

| Beschreibung | Erzeugt eine Tabelle von Zeitstempeln im halboffenen Bereich, in Schritten des Intervalls. | | Beispiel | range(TIMESTAMP '2001-04-10', TIMESTAMP '2001-04-11', INTERVAL 30 MINUTE) |