Kategorien:

Konvertierungsfunktionen, Datums- und Uhrzeitfunktionen

TO_TIME , TIME

Konvertiert einen Eingabeausdruck in eine Zeit.

Siehe auch:

TRY_TO_TIME

Syntax

TO_TIME( <string_expr> [, <format> ] )
TO_TIME( <timestamp_expr> )
TO_TIME( '<integer>' )
TO_TIME( <variant_expr> )

TIME( <string_expr> )
TIME( <timestamp_expr> )
TIME( '<integer>' )
TIME( <variant_expr> )
Copy

Argumente

Erforderlich:

string_expr oder timestamp_expr oder 'integer' oder variant_expr

Ausdruck, der in eine Uhrzeit umgewandelt werden soll:

  • Bei string_expr die Zeichenfolge, die in einen Zeitwert konvertiert werden soll.

  • Bei timestamp_expr der Zeitstempel, der in eine Uhrzeit konvertiert werden soll. Die Funktion gibt die Uhrzeitkomponente des Eingabewerts zurück.

  • Bei 'integer' eine Zeichenfolge mit einer Ganzzahl, die in einen Zeitwert konvertiert werden soll. Die Ganzzahl (Integer) wird als die Anzahl der Sekunden, Millisekunden, Mikrosekunden oder Nanosekunden nach Beginn der Unix-Epoche behandelt. Weitere Informationen dazu finden Sie in den Nutzungshinweisen.

    Für diesen Zeitstempel erhält die Funktion die Anzahl der Sekunden nach dem Beginn der Unix-Epoche. Die Funktion führt eine Modulo-Operation aus, um den Rest aus der Division dieser Zahl durch die Anzahl der Sekunden eines Tages (86400) zu erhalten:

    number_of_seconds % 86400

    Die Funktion interpretiert diesen Rest als die Anzahl der Sekunden nach Mitternacht.

    Angenommen, der Wert ist '31536002789'.

    1. Ausgehend von der Größe dieses Wertes verwendet die Funktion Millisekunden als Zeiteinheit und bestimmt, dass der Wert für 1971-01-01 00:00:02.789 steht.

    2. Die Funktion ermittelt für diesen Wert die Anzahl der Sekunden nach der Unix-Epoche (31536002).

    3. Die Funktion erhält den Rest aus der Division dieser Zahl durch die Anzahl der Sekunden eines Tages (31536002 % 86400).

    4. Die Funktion verwendet den Rest (2) als die Anzahl der Sekunden nach Mitternacht. Der resultierende Wert ist 00:00:02.

  • variant_expr:

    • Wenn der VARIANT-Wert eine Zeichenfolge im TIME-Format (wie HH:MI:SS) enthält, wird eine Zeichenfolgenkonvertierung durchgeführt.

    • Wenn der VARIANT-Wert eine Zeichenfolge im INTEGER-Format enthält, wird eine Zeichenfolgenkonvertierung durchgeführt und der Wert als Anzahl der Sekunden seit Mitternacht behandelt (Modulus von 86.400, falls erforderlich).

    • Wenn der VARIANT-Wert einen JSON-Nullwert enthält, ist die Ausgabe NULL.

Bei allen anderen Werten wird ein Konvertierungsfehler generiert.

Optional:

format

Uhrzeitformatspezifizierer für string_expr oder AUTO, was angibt, dass Snowflake automatisch das zu verwendende Format ermittelt. Weitere Informationen dazu finden Sie unter Datums- und Uhrzeitformate in Konvertierungsfunktionen.

Standard: Der aktuelle Wert des Sitzungsparameters TIME_INPUT_FORMAT (Standard: AUTO)

Rückgabewerte

Der Datentyp des zurückgegebenen Werts ist TIME. Wenn die Eingabe NULL ist, wird NULL zurückgegeben.

Nutzungshinweise

  • Das Anzeigeformat für Zeitwerte in der Ausgabe wird durch den Sitzungsparameter TIME_OUTPUT_FORMAT bestimmt (Standard: HH24:MI:SS).

  • Wenn das Format des Eingabeparameters eine Zeichenfolge ist, die eine Ganzzahl (Integer) enthält, wird die Maßeinheit für den Wert (Sekunden, Mikrosekunden, Millisekunden oder Nanosekunden) wie folgt bestimmt:

  • Nachdem die Zeichenfolge in eine Ganzzahl konvertiert wurde, wird die Ganzzahl als Anzahl von Sekunden, Millisekunden, Mikrosekunden oder Nanosekunden nach dem Beginn der Unix-Epoche behandelt (1970-01-01 00:00:00.000000000 UTC).

    • Wenn die Ganzzahl kleiner als 31.536.000.000 (die Anzahl der Millisekunden eines Jahres) ist, wird der Wert als Anzahl der Sekunden behandelt.

    • Wenn der Wert größer oder gleich 31.536.000.000 und kleiner als 31.536.000.000.000 ist, wird der Wert als Millisekunden behandelt.

    • Wenn der Wert größer oder gleich 31.536.000.000.000 und kleiner als 31.536.000.000.000.000 ist, wird der Wert als Mikrosekunde behandelt.

    • Wenn der Wert größer oder gleich 31.536.000.000.000.000 ist, wird der Wert als Nanosekunde behandelt.

  • Wenn mehr als eine Zeile ausgewertet wird (z. B. bei Eingabe der Spaltenname einer Tabelle, die mehr als eine Zeile enthält), bestimmt der erste verarbeitete Wert, ob alle nachfolgenden Werte als Sekunden, Millisekunden, Mikrosekunden oder Nanosekunden behandelt werden.

  • Im Gegensatz zur Funktion TO_TIME unterstützt die Funktion TIME den optionalen Parameter format nicht.

Beispiele

In diesen Beispielen werden die Funktionen TO_TIME und TIME verwendet.

SELECT TO_TIME('13:30:00'), TIME('13:30:00');
Copy
+---------------------+------------------+
| TO_TIME('13:30:00') | TIME('13:30:00') |
|---------------------+------------------|
| 13:30:00            | 13:30:00         |
+---------------------+------------------+
SELECT TO_TIME('13:30:00.000'), TIME('13:30:00.000');
Copy
+-------------------------+----------------------+
| TO_TIME('13:30:00.000') | TIME('13:30:00.000') |
|-------------------------+----------------------|
| 13:30:00                | 13:30:00             |
+-------------------------+----------------------+

Dieses Beispiel zeigt, wie mit der Funktion TO_TIME andere Feldtrennzeichen als die Standard-Doppelpunkte verarbeitet werden können. Das Beispiel verwendet das Punktzeichen als Trennzeichen zwischen Stunden und Minuten sowie zwischen Minuten und Sekunden:

SELECT TO_TIME('11.15.00', 'HH24.MI.SS');
Copy
+-----------------------------------+
| TO_TIME('11.15.00', 'HH24.MI.SS') |
|-----------------------------------|
| 11:15:00                          |
+-----------------------------------+

Dieses Beispiel zeigt, wie die Funktion TO_TIME eine Zeichenfolge interpretiert, die einen Integer-Wert enthält:

CREATE OR REPLACE TABLE demo1_time (
  description VARCHAR,
  value VARCHAR -- string rather than bigint
);

INSERT INTO demo1_time (description, value) VALUES
  ('Seconds',      '31536001'),
  ('Milliseconds', '31536002400'),
  ('Microseconds', '31536003600000'),
  ('Nanoseconds',  '31536004900000000');
Copy
SELECT description,
       value,
       TO_TIMESTAMP(value),
       TO_TIME(value)
  FROM demo1_time
  ORDER BY value;
Copy
+--------------+-------------------+-------------------------+----------------+
| DESCRIPTION  | VALUE             | TO_TIMESTAMP(VALUE)     | TO_TIME(VALUE) |
|--------------+-------------------+-------------------------+----------------|
| Seconds      | 31536001          | 1971-01-01 00:00:01.000 | 00:00:01       |
| Milliseconds | 31536002400       | 1971-01-01 00:00:02.400 | 00:00:02       |
| Microseconds | 31536003600000    | 1971-01-01 00:00:03.600 | 00:00:03       |
| Nanoseconds  | 31536004900000000 | 1971-01-01 00:00:04.900 | 00:00:04       |
+--------------+-------------------+-------------------------+----------------+