TIMESTAMP-Funktionen in Standard-SQL

BigQuery unterstützt die folgenden TIMESTAMP-Funktionen.

HINWEIS: Diese Funktionen geben bei Überlauf einen Laufzeitfehler zurück. Ergebniswerte werden durch die definierten Mindest-/Maximalwerte von Datum und Zeitstempel begrenzt.

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP()

Beschreibung

CURRENT_TIMESTAMP() erzeugt einen TIMESTAMP-Wert, der kontinuierlich und eindeutig ist, genau 60 Sekunden pro Minute hat und keine Werte über die Schaltsekunde wiederholt. Klammern sind optional.

Diese Funktion verarbeitet Schaltsekunden, indem diese über ein Fenster von 20 Stunden um die eingefügten Schaltsekunden herum verteilt werden.

Unterstützte Eingabetypen

Nicht zutreffend

Datentyp des Ergebnisses

TIMESTAMP

Beispiele

SELECT CURRENT_TIMESTAMP() as now;

+--------------------------------+
| now                            |
+--------------------------------+
| 2020-06-02 23:57:12.120174 UTC |
+--------------------------------+

Wenn eine Spalte mit dem Namen current_timestamp vorhanden ist, sind der Spaltenname und der Funktionsaufruf ohne Klammern nicht eindeutig. Fügen Sie Klammern hinzu, um den Funktionsaufruf zu gewährleisten. Um den Spaltennamen sicherzustellen, geben Sie für ihn seine Bereichsvariable an. Die folgende Abfrage wählt beispielsweise die Funktion in der Spalte now und die Tabellenspalte in der Spalte current_timestamp aus.

WITH t AS (SELECT 'column value' AS `current_timestamp`)
SELECT current_timestamp() AS now, t.current_timestamp FROM t;

+--------------------------------+-------------------+
| now                            | current_timestamp |
+--------------------------------+-------------------+
| 2020-06-02 23:57:12.120174 UTC | column value      |
+--------------------------------+-------------------+

EXTRACT

EXTRACT(part FROM timestamp_expression [AT TIME ZONE timezone])

Beschreibung

Gibt einen Wert zurück, der dem angegebenen part aus einer bereitgestellten timestamp_expression entspricht. Diese Funktion unterstützt den optionalen Parameter timezone. Informationen zur Angabe einer Zeitzone finden Sie unter Zeitzonendefinitionen.

Zulässige part-Werte:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAYOFWEEK
  • DAY
  • DAYOFYEAR
  • WEEK: gibt die Kalenderwoche des Datums im Bereich [0, 53] zurück. Wochen beginnen mit Sonntag und Datumsangaben vor dem ersten Sonntag des Jahres liegen in Woche 0.
  • WEEK(<WEEKDAY>): gibt die Kalenderwoche von timestamp_expression im Bereich [0, 53] zurück. Wochen beginnen mit WEEKDAY. datetime-Datumsangaben vor dem ersten WEEKDAY des Jahres liegen in Woche 0. Gültige Werte für WEEKDAY sind SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY und SATURDAY.
  • ISOWEEK: gibt die ISO 8601-Wochennummer von datetime_expression zurück. ISOWEEK-Wochen beginnen am Montag. Rückgabewerte liegen im Bereich [1, 53]. Die erste ISOWEEK-Woche eines ISO-Jahres beginnt am Montag vor dem ersten Donnerstag des gregorianischen Kalenderjahres.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: gibt das Kalenderjahr mit ISO 8601-Wochennummerierung zurück. Das entspricht dem gregorianischen Kalenderjahr mit dem Donnerstag der Woche, zu der date_expression gehört.
  • DATE
  • DATETIME
  • TIME

Bei den zurückgegebenen Werten werden jeweils die kleineren Zeiträume weggekürzt. Wenn Sie z. B. Sekunden extrahieren, werden durch EXTRACT die Millisekunden- und Mikrosekundenwerte entfernt.

Rückgabedatentyp

INT64, außer in folgenden Fällen:

  • Wenn part DATE ist, wird ein DATE-Objekt zurückgegeben.
  • Wenn part DATETIME ist, wird ein DATETIME-Objekt zurückgegeben.
  • Wenn part TIME ist, wird ein TIME-Objekt zurückgegeben.

Beispiele

Im folgenden Beispiel gibt EXTRACT einen Wert zurück, der dem Datumsteil DAY entspricht.

WITH Input AS (SELECT TIMESTAMP("2008-12-25 05:30:00+00") AS timestamp_value)
SELECT
  EXTRACT(DAY FROM timestamp_value AT TIME ZONE "UTC") AS the_day_utc,
  EXTRACT(DAY FROM timestamp_value AT TIME ZONE "America/Los_Angeles") AS the_day_california
FROM Input

+-------------+--------------------+
| the_day_utc | the_day_california |
+-------------+--------------------+
| 25          | 24                 |
+-------------+--------------------+

Im folgenden Beispiel gibt EXTRACT Werte zurück, die verschiedenen Teilen der Terminangabe aus einer Spalte mit Zeitstempeln entsprechen.

WITH Timestamps AS (
  SELECT TIMESTAMP("2005-01-03 12:34:56+00") AS timestamp_value UNION ALL
  SELECT TIMESTAMP("2007-12-31 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2009-01-01 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2009-12-31 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2017-01-02 12:00:00+00") UNION ALL
  SELECT TIMESTAMP("2017-05-26 12:00:00+00")
)
SELECT
  timestamp_value,
  EXTRACT(ISOYEAR FROM timestamp_value) AS isoyear,
  EXTRACT(ISOWEEK FROM timestamp_value) AS isoweek,
  EXTRACT(YEAR FROM timestamp_value) AS year,
  EXTRACT(WEEK FROM timestamp_value) AS week
FROM Timestamps
ORDER BY timestamp_value;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+---------+---------+------+------+
| timestamp_value         | isoyear | isoweek | year | week |
+-------------------------+---------+---------+------+------+
| 2005-01-03 12:34:56 UTC | 2005    | 1       | 2005 | 1    |
| 2007-12-31 12:00:00 UTC | 2008    | 1       | 2007 | 52   |
| 2009-01-01 12:00:00 UTC | 2009    | 1       | 2009 | 0    |
| 2009-12-31 12:00:00 UTC | 2009    | 53      | 2009 | 52   |
| 2017-01-02 12:00:00 UTC | 2017    | 1       | 2017 | 1    |
| 2017-05-26 12:00:00 UTC | 2017    | 21      | 2017 | 21   |
+-------------------------+---------+---------+------+------+

Im folgenden Beispiel fällt timestamp_expression auf einen Montag. EXTRACT berechnet die erste Spalte mit Wochen, die am Sonntag beginnen, und die zweite Spalte mit Wochen, die am Montag beginnen.

WITH table AS (SELECT TIMESTAMP("2017-11-05 00:00:00+00") AS timestamp_value)
SELECT
  timestamp_value,
  EXTRACT(WEEK(SUNDAY) FROM timestamp_value) AS week_sunday,
  EXTRACT(WEEK(MONDAY) FROM timestamp_value) AS week_monday
FROM table;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------+---------------+
| timestamp_value         | week_sunday | week_monday   |
+-------------------------+-------------+---------------+
| 2017-11-05 00:00:00 UTC | 45          | 44            |
+-------------------------+-------------+---------------+

STRING

STRING(timestamp_expression[, timezone])

Beschreibung

Wandelt einen timestamp_expression in einen STRING-Datentyp um. Unterstützt einen optionalen Parameter zur Angabe einer Zeitzone. Informationen zur Angabe einer Zeitzone finden Sie unter Zeitzonendefinitionen.

Rückgabedatentyp

STRING

Beispiel

SELECT STRING(TIMESTAMP "2008-12-25 15:30:00+00", "UTC") AS string;

+-------------------------------+
| string                        |
+-------------------------------+
| 2008-12-25 15:30:00+00        |
+-------------------------------+

TIMESTAMP

TIMESTAMP(string_expression[, timezone])
TIMESTAMP(date_expression[, timezone])
TIMESTAMP(datetime_expression[, timezone])

Beschreibung

  • string_expression[, timezone]: wandelt einen STRING-Ausdruck in einen TIMESTAMP-Datentyp um. string_expression muss ein Zeitstempelliteral enthalten. Wenn string_expression eine Zeitzone im Zeitstempelliteral enthält, fügen Sie kein explizites timezone-Argument ein.
  • date_expression[, timezone]: wandelt ein DATE-Objekt in einen TIMESTAMP-Datentyp um.
  • datetime_expression[, timezone]: wandelt ein DATETIME-Objekt in einen TIMESTAMP-Datentyp um.

Diese Funktion unterstützt einen optionalen Parameter zur Angabe einer Zeitzone. Wenn keine Zeitzone angegeben ist, wird die Standardzeitzone UTC verwendet.

Rückgabedatentyp

TIMESTAMP

Beispiele

SELECT TIMESTAMP("2008-12-25 15:30:00+00") AS timestamp_str;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_str           |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+
SELECT TIMESTAMP("2008-12-25 15:30:00", "America/Los_Angeles") AS timestamp_str;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_str           |
+-------------------------+
| 2008-12-25 23:30:00 UTC |
+-------------------------+
SELECT TIMESTAMP("2008-12-25 15:30:00 UTC") AS timestamp_str;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_str           |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+
SELECT TIMESTAMP(DATETIME "2008-12-25 15:30:00") AS timestamp_datetime;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_datetime      |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+
SELECT TIMESTAMP(DATE "2008-12-25") AS timestamp_date;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_date          |
+-------------------------+
| 2008-12-25 00:00:00 UTC |
+-------------------------+

TIMESTAMP_ADD

TIMESTAMP_ADD(timestamp_expression, INTERVAL int64_expression date_part)

Beschreibung

Addiert zum Zeitstempel unabhängig von der Zeitzone int64_expression date_part-Einheiten hinzu.

TIMESTAMP_ADD unterstützt die folgenden Werte für date_part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR. Entspricht dem Wert 60  für MINUTE.
  • DAY. Entspricht dem Wert 24 für HOUR.

Rückgabedatentypen

TIMESTAMP

Beispiel

SELECT
  TIMESTAMP("2008-12-25 15:30:00+00") AS original,
  TIMESTAMP_ADD(TIMESTAMP "2008-12-25 15:30:00+00", INTERVAL 10 MINUTE) AS later;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+
| original                | later                   |
+-------------------------+-------------------------+
| 2008-12-25 15:30:00 UTC | 2008-12-25 15:40:00 UTC |
+-------------------------+-------------------------+

TIMESTAMP_SUB

TIMESTAMP_SUB(timestamp_expression, INTERVAL int64_expression date_part)

Beschreibung

Subtrahiert vom Zeitstempel unabhängig von der Zeitzone int64_expression date_part-Einheiten.

TIMESTAMP_SUB unterstützt die folgenden Werte für date_part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR. Entspricht dem Wert 60  für MINUTE.
  • DAY. Entspricht dem Wert 24 für HOUR.

Rückgabedatentyp

TIMESTAMP

Beispiel

SELECT
  TIMESTAMP("2008-12-25 15:30:00+00") AS original,
  TIMESTAMP_SUB(TIMESTAMP "2008-12-25 15:30:00+00", INTERVAL 10 MINUTE) AS earlier;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+
| original                | earlier                 |
+-------------------------+-------------------------+
| 2008-12-25 15:30:00 UTC | 2008-12-25 15:20:00 UTC |
+-------------------------+-------------------------+

TIMESTAMP_DIFF

TIMESTAMP_DIFF(timestamp_expression_a, timestamp_expression_b, date_part)

Description

Gibt die Anzahl der gesamten angegebenen date_part-Intervalle zwischen zwei TIMESTAMP-Objekten (timestamp_expression_btimestamp_expression_a) zurück. Wenn der erste TIMESTAMP (timestamp_expression_a) vor dem zweiten (timestamp_expression_b) liegt, ist die Ausgabe negativ. Ein Fehler wird ausgegeben, wenn die Berechnung einen Überlauf des Ergebnistyps verursacht, z. B. wenn die Differenz in Mikrosekunden zwischen den beiden TIMESTAMP-Objekten einen Überlauf für einen INT64-Wert verursachen würde.

TIMESTAMP_DIFF unterstützt die folgenden Werte für date_part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR. Entspricht dem Wert 60  für MINUTE.
  • DAY. Entspricht dem Wert 24 für HOUR.

Rückgabedatentyp

INT64

Beispiel

SELECT
  TIMESTAMP("2010-07-07 10:20:00+00") AS later_timestamp,
  TIMESTAMP("2008-12-25 15:30:00+00") AS earlier_timestamp,
  TIMESTAMP_DIFF(TIMESTAMP "2010-07-07 10:20:00+00", TIMESTAMP "2008-12-25 15:30:00+00", HOUR) AS hours;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+-------+
| later_timestamp         | earlier_timestamp       | hours |
+-------------------------+-------------------------+-------+
| 2010-07-07 10:20:00 UTC | 2008-12-25 15:30:00 UTC | 13410 |
+-------------------------+-------------------------+-------+

Im folgenden Beispiel liegt der erste Zeitstempel vor dem zweiten, was zu einer negativen Ausgabe führt.

SELECT TIMESTAMP_DIFF(TIMESTAMP "2018-08-14", TIMESTAMP "2018-10-14", DAY);

+---------------+
| negative_diff |
+---------------+
| -61           |
+---------------+

In diesem Beispiel ist das Ergebnis 0, da nur die Anzahl der gesamten angegebenen HOUR-Intervalle enthalten ist.

SELECT TIMESTAMP_DIFF("2001-02-01 01:00:00", "2001-02-01 00:00:01", HOUR)

+---------------+
| negative_diff |
+---------------+
| 0             |
+---------------+

TIMESTAMP_TRUNC

TIMESTAMP_TRUNC(timestamp_expression, date_part[, timezone])

Beschreibung

Kürzt einen Zeitstempel auf die Granularität von date_part.

TIMESTAMP_TRUNC unterstützt die folgenden Werte für date_part:

  • MICROSECOND
  • MILLISECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • WEEK(<WEEKDAY>): kürzt timestamp_expression auf die vorhergehende Wochengrenze, wobei Wochen mit WEEKDAY beginnen. Gültige Werte für WEEKDAY sind SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY und SATURDAY.
  • ISOWEEK: kürzt timestamp_expression auf die vorhergehende Wochengrenze nach ISO 8601. ISOWEEKs beginnen mit dem Montag. Die erste ISOWEEK eines ISO-Jahres enthält den ersten Donnerstag des entsprechenden gregorianischen Kalenderjahres. Jede date_expression vor diesem Datum wird auf den Montag davor gekürzt.
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR: kürzt timestamp_expression auf die vorhergehende Jahresgrenze gemäß der ISO 8601-Wochennummerierung. Die ISO-Jahresgrenze ist der Montag der ersten Woche, in der der Donnerstag in das entsprechende gregorianische Kalenderjahr fällt.

Die Funktion TIMESTAMP_TRUNC unterstützt den optionalen Parameter timezone. Dieser Parameter gilt für die folgenden date_parts:

  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • WEEK(<WEEKDAY>)
  • ISOWEEK
  • MONTH
  • QUARTER
  • YEAR
  • ISOYEAR

Verwenden Sie diesen Parameter, wenn eine andere Zeitzone als die Standardzeitzone UTC als Teil der Kürzung verwendet werden soll.

Beim Kürzen eines TIMESTAMP auf MINUTE oder HOUR gibt TIMESTAMP_TRUNC die amtliche Zeit von TIMESTAMP in der angegebenen (oder standardmäßigen) Zeitzone an und subtrahiert die Minuten und Sekunden (beim Kürzen auf HOUR) oder die Sekunden (beim Kürzen auf MINUTE) von diesem TIMESTAMP. Dadurch ergeben sich in den meisten Fällen intuitive Ergebnisse. Bei zeitlicher Nähe zu Sommerzeitübergängen ohne Stundenangleichung sind sie jedoch nicht intuitiv.

Rückgabedatentyp

TIMESTAMP

Beispiele

SELECT
  TIMESTAMP_TRUNC(TIMESTAMP "2008-12-25 15:30:00+00", DAY, "UTC") AS utc,
  TIMESTAMP_TRUNC(TIMESTAMP "2008-12-25 15:30:00+00", DAY, "America/Los_Angeles") AS la;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-----------------=-------+
| utc                     | la                      |
+-------------------------+-------------------------+
| 2008-12-25 00:00:00 UTC | 2008-12-25 08:00:00 UTC |
+-------------------------+-------------------------+

Im folgenden Beispiel hat timestamp_expression einen Zeitzonenversatz von +12. Die erste Spalte enthält den timestamp_expression in UTC-Zeit. Die zweite Spalte enthält die Ausgabe von TIMESTAMP_TRUNC mit Wochen, die am Montag beginnen. Da der timestamp_expression in UTC auf einen Sonntag fällt, wird er von TIMESTAMP_TRUNC bis zum Montag davor gekürzt. In der dritten Spalte wird dieselbe Funktion mit dem optionalen Zeitzonendefinitionsargument "Pacific/Auckland" angezeigt. Hier wird timestamp_expression von der Funktion unter Verwendung der neuseeländischen Sommerzeit gekürzt. Darin fällt die Angabe auf einen Montag.

SELECT
  timestamp_value AS timestamp_value,
  TIMESTAMP_TRUNC(timestamp_value, WEEK(MONDAY), "UTC") AS utc_truncated,
  TIMESTAMP_TRUNC(timestamp_value, WEEK(MONDAY), "Pacific/Auckland") AS nzdt_truncated
FROM (SELECT TIMESTAMP("2017-11-06 00:00:00+12") AS timestamp_value);

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+-------------------------+-------------------------+
| timestamp_value         | utc_truncated           | nzdt_truncated          |
+-------------------------+-------------------------+-------------------------+
| 2017-11-05 12:00:00 UTC | 2017-10-30 00:00:00 UTC | 2017-11-05 11:00:00 UTC |
+-------------------------+-------------------------+-------------------------+

Im folgenden Beispiel liegt der ursprüngliche timestamp_expression im gregorianischen Kalenderjahr 2015. TIMESTAMP_TRUNC mit dem Datumsteil ISOYEAR kürzt den timestamp_expression jedoch bis zum Anfang des ISO-Jahres und nicht des gregorianischen Kalenderjahres. Der erste Donnerstag des Kalenderjahres 2015 fiel auf den 01.01.2015. Deshalb beginnt das ISO-Jahr 2015 mit dem Montag davor am 29.12.2014. Entsprechend fällt die ISO-Jahresgrenze vor timestamp_expression 2015-06-15 00:00:00+00 auf den 29.12.2014.

SELECT
  TIMESTAMP_TRUNC("2015-06-15 00:00:00+00", ISOYEAR) AS isoyear_boundary,
  EXTRACT(ISOYEAR FROM TIMESTAMP "2015-06-15 00:00:00+00") AS isoyear_number;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+----------------+
| isoyear_boundary        | isoyear_number |
+-------------------------+----------------+
| 2014-12-29 00:00:00 UTC | 2015           |
+-------------------------+----------------+

FORMAT_TIMESTAMP

FORMAT_TIMESTAMP(format_string, timestamp[, timezone])

Beschreibung

Formatiert einen Zeitstempel gemäß dem angegebenen format_string-Wert.

Unter Unterstützte Formatelemente für TIMESTAMP ist eine Liste mit Formatelementen aufgeführt, die von dieser Funktion unterstützt werden.

Rückgabedatentyp

STRING

Beispiel

SELECT FORMAT_TIMESTAMP("%c", TIMESTAMP "2008-12-25 15:30:00+00", "UTC") AS formatted;

+--------------------------+
| formatted                |
+--------------------------+
| Thu Dec 25 15:30:00 2008 |
+--------------------------+
SELECT FORMAT_TIMESTAMP("%b-%d-%Y", TIMESTAMP "2008-12-25 15:30:00+00") AS formatted;

+-------------+
| formatted   |
+-------------+
| Dec-25-2008 |
+-------------+
SELECT FORMAT_TIMESTAMP("%b %Y", TIMESTAMP "2008-12-25 15:30:00+00")
  AS formatted;

+-------------+
| formatted   |
+-------------+
| Dec 2008    |
+-------------+

PARSE_TIMESTAMP

PARSE_TIMESTAMP(format_string, timestamp_string[, timezone])

Beschreibung

Wandelt die Stringdarstellung eines Zeitstempels in ein TIMESTAMP-Objekt um.

format_string enthält die Formatelemente, die definieren, wie timestamp_string formatiert ist. Jedem Element in timestamp_string muss ein Element in format_string entsprechen. Die Position jedes Elements in format_string muss mit der Position der einzelnen Elemente in timestamp_string übereinstimmen.

-- This works because elements on both sides match.
SELECT PARSE_TIMESTAMP("%a %b %e %I:%M:%S %Y", "Thu Dec 25 07:30:00 2008")

-- This doesn't work because the year element is in different locations.
SELECT PARSE_TIMESTAMP("%a %b %e %Y %I:%M:%S", "Thu Dec 25 07:30:00 2008")

-- This doesn't work because one of the year elements is missing.
SELECT PARSE_TIMESTAMP("%a %b %e %I:%M:%S", "Thu Dec 25 07:30:00 2008")

-- This works because %c can find all matching elements in timestamp_string.
SELECT PARSE_TIMESTAMP("%c", "Thu Dec 25 07:30:00 2008")

Der Formatstring unterstützt mit Ausnahme von %Q, %a, %A, %g, %G, %j und %P, %u, %U, %V, %w und %W die meisten Formatelemente vollständig.

Beachten Sie bei Verwendung von PARSE_TIMESTAMP Folgendes:

  • Nicht angegebene Felder: Jedes nicht angegebene Feld wird ab 1970-01-01 00:00:00.0 initialisiert. Dieser Initialisierungswert verwendet die durch das Zeitzonenargument der Funktion angegebene Zeitzone, falls vorhanden. Wenn nicht, verwendet der Initialisierungswert die Standardzeitzone UTC. Sollte beispielsweise das Jahr nicht angegeben sein, wird standardmäßig 1970 verwendet usw.
  • Groß-/Kleinschreibung in Namen: Bei Namen wie Monday, February usw. wird die Groß-/Kleinschreibung nicht berücksichtigt.
  • Leerraum. Ein oder mehrere aufeinanderfolgende Leerräume im Formatstring stimmen mit null oder mehreren aufeinanderfolgenden Leerräumen im Zeitstempelstring überein. Darüber hinaus sind voran- und nachgestellte Leerräume im Zeitstempelstring immer erlaubt – auch wenn sie nicht im Formatstring vorhanden sind.
  • Formatvorrang. Wenn zwei oder mehr Formatelemente überlappende Informationen haben (%F und %Y beeinflussen z. B. beide das Jahr), überschreibt im Allgemeinen das letzte Format alle vorherigen Formate, mit einigen Ausnahmen (siehe Beschreibung von %s, %C und %y).

Rückgabedatentyp

TIMESTAMP

Beispiel

SELECT PARSE_TIMESTAMP("%c", "Thu Dec 25 07:30:00 2008") AS parsed;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| parsed                  |
+-------------------------+
| 2008-12-25 07:30:00 UTC |
+-------------------------+

TIMESTAMP_SECONDS

TIMESTAMP_SECONDS(int64_expression)

Beschreibung

Interpretiert int64_expression als Anzahl der Sekunden seit 01.01.1970 00:00:00 UTC.

Rückgabedatentyp

TIMESTAMP

Beispiel

SELECT TIMESTAMP_SECONDS(1230219000) AS timestamp_value;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_value         |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+

TIMESTAMP_MILLIS

TIMESTAMP_MILLIS(int64_expression)

Beschreibung

Interpretiert int64_expression als Anzahl der Millisekunden seit 01.01.1970 00:00:00 UTC.

Rückgabedatentyp

TIMESTAMP

Beispiel

SELECT TIMESTAMP_MILLIS(1230219000000) AS timestamp_value;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_value         |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+

TIMESTAMP_MICROS

TIMESTAMP_MICROS(int64_expression)

Beschreibung

Interpretiert int64_expression als Anzahl der Mikrosekunden seit 01.01.1970 00:00:00 UTC.

Rückgabedatentyp

TIMESTAMP

Beispiel

SELECT TIMESTAMP_MICROS(1230219000000000) AS timestamp_value;

-- Results may differ, depending upon the environment and time zone where this query was executed.
+-------------------------+
| timestamp_value         |
+-------------------------+
| 2008-12-25 15:30:00 UTC |
+-------------------------+

UNIX_SECONDS

UNIX_SECONDS(timestamp_expression)

Beschreibung

Gibt die Anzahl der Sekunden seit 01.01.1970 00:00:00 UTC zurück. Nachkommastellen werden abgeschnitten.

Rückgabedatentyp

INT64

Beispiel

SELECT UNIX_SECONDS(TIMESTAMP "2008-12-25 15:30:00+00") AS seconds;

+------------+
| seconds    |
+------------+
| 1230219000 |
+------------+

UNIX_MILLIS

UNIX_MILLIS(timestamp_expression)

Beschreibung

Gibt die Anzahl der Millisekunden seit 01.01.1970 00:00:00 UTC zurück. Nachkommastellen werden abgeschnitten.

Rückgabedatentyp

INT64

Beispiel

SELECT UNIX_MILLIS(TIMESTAMP "2008-12-25 15:30:00+00") AS millis;

+---------------+
| millis        |
+---------------+
| 1230219000000 |
+---------------+

UNIX_MICROS

UNIX_MICROS(timestamp_expression)

Beschreibung

Gibt die Anzahl der Mikrosekunden seit 01.01.1970 00:00:00 UTC zurück. Nachkommastellen werden abgeschnitten.

Rückgabedatentyp

INT64

Beispiel

SELECT UNIX_MICROS(TIMESTAMP "2008-12-25 15:30:00+00") AS micros;

+------------------+
| micros           |
+------------------+
| 1230219000000000 |
+------------------+

Unterstützte Formatelemente für TIMESTAMP

Wenn nicht anders angegeben, unterstützen TIMESTAMP-Funktionen, die Formatstrings verwenden, folgende Elemente:

Formatelement Beschreibung Beispiel
%A Der vollständige Wochentagname. Mittwoch
%a Der abgekürzte Wochentagname. Mi
%B Der vollständige Monatsname. Januar
%b oder %h Der abgekürzte Monatsname. Jan
%C Das Jahrhundert (ein Jahr geteilt durch 100 und gekürzt auf eine Ganzzahl) als Dezimalzahl (00–99). 20
%c Die Datums- und Uhrzeitdarstellung im Format %a %b %e %T %Y. Mittwoch, 20. Januar 16:47:00 2021
%D Das Datum im Format %m/%d/%y. 01/20/21
%d Der Tag des Monats als Dezimalzahl (01–31). 20
%e Der Tag des Monats als Dezimalzahl (1–31); den einzelnen Ziffern ist ein Leerzeichen vorangestellt. 20
%F Das Datum im Format %Y-%m-%d. 2021-01-20
%G Das Jahr nach ISO 8601 mit Jahrhundert als Dezimalzahl. Jedes ISO-Jahr beginnt mit dem Montag vor dem ersten Donnerstag des gregorianischen Kalenderjahres. Beachten Sie, dass %G und %Y nahe den gregorianischen Jahresgrenzen unterschiedliche Ergebnisse erzeugen können, wo das gregorianische Jahr und das ISO-Jahr möglicherweise voneinander abweichen. 2021
%g Das Jahr nach ISO 8601 ohne Jahrhundert als Dezimalzahl (00–99). Jedes ISO-Jahr beginnt mit dem Montag vor dem ersten Donnerstag des gregorianischen Kalenderjahres. Beachten Sie, dass %g und %y nahe den gregorianischen Jahresgrenzen unterschiedliche Ergebnisse erzeugen können, wobei das gregorianische Jahr und das ISO-Jahr voneinander abweichen können. 21
%H Die Stunde (24-Stunden-Anzeige) als Dezimalzahl (00–23). 16
%I Die Stunde (12-Stunden-Anzeige) als Dezimalzahl (01–12). 04
%j Der Tag des Jahres als Dezimalzahl (001–366). 020
%k Die Stunde (24-Stunden-Anzeige) als Dezimalzahl (0–23); den einzelnen Ziffern ist ein Leerzeichen vorangestellt. 16
%l Die Stunde (12-Stunden-Anzeige) als Dezimalzahl (1–12); den einzelnen Ziffern ist ein Leerzeichen vorangestellt. 11
%M Die Minute als Dezimalzahl (00–59). 47
%m Der Monat als Dezimalzahl (01–12). 01
%n Ein Zeilenumbruch.
%P Entweder "am" oder "pm". a.m.
%p Entweder "AM" oder "PM". AM
%Q Das Quartal als Dezimalzahl (1–4). 1
%R Die Zeit im Format %H:%M. 16:47
%r Die 12-Stunden-Anzeige mit AM/PM-Notation. 04:47:00 PM
%S Die Sekunde als Dezimalzahl (00–60). 00
%s Die Anzahl der Sekunden seit 01.01.1970 00:00:00 UTC. Überschreibt immer alle anderen Formatelemente, unabhängig davon, wo %s im String angezeigt wird. Wenn mehrere %s Elemente angezeigt werden, dann hat das letzte Element Vorrang. 1611179220
%T Die Zeit im Format %H:%M:%S. 16:47:00
%t Ein Tab-Zeichen.
%U Die Wochennummer des Jahres (Sonntag als erster Tag der Woche) als Dezimalzahl (00–53). 03
%u Der Wochentag (Montag als erster Tag der Woche) als Dezimalzahl (1–7). 3
%V Die ISO 8601-Wochennummer des Jahres (Montag als erster Tag der Woche) als Dezimalzahl (01–53). Wenn die Woche mit dem 1. Januar mindestens vier Tage im neuen Jahr hat, dann ist sie Woche 1. Andernfalls ist sie Woche 53 des Vorjahres und die nächste Woche ist Woche 1. 03
%W Die Wochennummer des Jahres (Montag als erster Tag der Woche) als Dezimalzahl (00–53). 03
%w Der Wochentag (Sonntag als erster Tag der Woche) als Dezimalzahl (0–6). 3
%X Die Zeitdarstellung im Format HH:MM:SS. 16:47:00
%x Die Datumsdarstellung im MM/TT/JJ-Format. 01/20/21
%Y Das Jahr mit Jahrhundert als Dezimalzahl. 2021
%y Das Jahr ohne Jahrhundert als Dezimalzahl (00–99), mit einer optionalen vorangestellten Null. Kann mit %C gemischt werden. Wenn %C nicht angegeben ist, sind die Jahre 00–68 2000er, während die Jahre 69–99 1900er sind. 21
%Z Der Zeitzonenname. UTC-5
%z Der Versatz von der Nullmeridian-Zeitzone je nach Bedarf im Format +HHMM oder -HHMM, wobei die positiven Werte Orte östlich von Greenwich darstellen. -0500
%% Ein einzelnes %-Zeichen. %
%Ez RFC 3339-kompatible numerische Zeitzone (+HH:MM oder -HH:MM). -05:00
%E#S Sekunden mit #-Ziffern in Bruchgenauigkeit. 00.000
%E*S Sekunden mit vollständiger Bruchgenauigkeit (ein richtiges Sternchen). 00
%E4Y Jahre mit vier Ziffern (von 0001 bis 9999). Beachten Sie, dass %Y so viele Zeichen produziert, wie nötig sind, um das Jahr komplett darzustellen. 2021

Zeitzonendefinitionen

Mit bestimmten Datums- und Zeitstempelfunktionen kann die Standardzeitzone durch eine andere Zeitzone zu überschrieben werden. Sie geben eine Zeitzone entweder durch den Zeitzonennamen (z. B. America/Los_Angeles) oder durch den Zeitzonenversatz von UTC an (z. B. -08).

Wenn Sie sich für einen Zeitzonenversatz entscheiden, verwenden Sie folgendes Format:

(+|-)H[H][:M[M]]

Die folgenden Zeitstempel sind äquivalent, da der Zeitzonenversatz für America/Los_Angeles den Wert -08 für das angegebene Datum und die angegebene Uhrzeit hat.

SELECT UNIX_MILLIS(TIMESTAMP "2008-12-25 15:30:00 America/Los_Angeles") as millis;
SELECT UNIX_MILLIS(TIMESTAMP "2008-12-25 15:30:00-08:00") as millis;