Kategorien:

Konvertierungsfunktionen , Datums- und Uhrzeitfunktionen

TO_DATE , DATE

Konvertiert einen Eingabeausdruck in ein Datum:

  • Bei einem Zeichenfolgenausdruck das Ergebnis der Konvertierung der Zeichenfolge in ein Datum.

  • Bei einem Zeitstempelausdruck das Datum des Zeitstempels.

  • Bei einem Variantenausdruck:

    • Wenn die Variante eine Zeichenfolge enthält, wird eine Zeichenfolgenkonvertierung durchgeführt.

    • Wenn die Variante ein Datum enthält, bleibt der Datumswert unverändert.

    • Wenn die Variante einen JSON null-Wert enthält, lautet die Ausgabe NULL.

  • Bei Eingabe von NULL lautet die Ausgabe NULL.

Bei allen anderen Werten wird ein Konvertierungsfehler generiert.

Siehe auch:

TRY_TO_DATE

Syntax

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

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

Argumente

Benötigt:

Eine der folgenden Optionen:

Zeitstempelausdruck

Ein TIMESTAMP-Ausdruck. Der DATE-Teil von TIMESTAMP wird extrahiert.

Zeichenfolgenausdruck

Zeichenfolge, aus der ein Datum extrahiert werden soll, z. B. „2019-01-31“.

Ganzzahl

Ein Ausdruck, der eine Zeichenfolge ergibt, die eine Ganzzahl enthält, z. B. „15000000“. Abhängig von der Größenordnung der Zeichenfolge kann der Wert als Sekunden, Millisekunden, Mikrosekunden oder Nanosekunden interpretiert werden. Weitere Details dazu finden Sie in den Nutzungshinweisen unten.

Variant-Ausdruck

Ein Ausdruck vom Typ VARIANT. Der VARIANT-Wert muss einen DATE-Wert oder eine Zeichenfolge mit einem INTEGER-Wert enthalten. (TO_DATE gibt einen Fehler zurück, wenn ein VARIANT-Wert mit einem Zeitstempel übergeben wurde.)

Der VARIANT-Ausdruck muss einen der folgenden Typen enthalten:

  • Zeichenfolge, aus der ein Zeitstempel extrahiert werden soll

  • Ein Datum.

  • Eine Zeichenfolge mit einer Ganzzahl von Sekunden oder Millisekunden.

Obwohl TO_DATE einen TIMESTAMP-Wert akzeptiert, akzeptiert es keinen TIMESTAMP innerhalb eines VARIANT.

Optional:

Format

Datumsformatbezeichner für Zeichenfolgenausdruck oder AUTO, der angibt, wie Snowflake das Format interpretieren soll. Weitere Informationen dazu finden Sie unter Datums- und Uhrzeitformate in Konvertierungsfunktionen.

Der Standardwert ist der aktuelle Wert des Sitzungsparameters DATE_INPUT_FORMAT (normalerweise AUTO).

Nutzungshinweise

  • Wenn das Format des Eingabeparameters eine Zeichenfolge ist, die eine Ganzzahl enthält:

    • 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 (Eingabe ist z. B. der Spaltenname einer Tabelle, die mehr als zwei Zeilen enthält), bestimmt der erste verarbeitete Wert, ob alle nachfolgenden Werte als Sekunden, Millisekunden, Mikrosekunden oder Nanosekunden behandelt werden.

      Wenn der erste Wert größer oder gleich 31.536.000.000 ist, werden alle Werte als Millisekunden behandelt, auch wenn einige verbleibende Werte kleiner als 31.536.000.000 sind. Eine ähnliche Logik gilt für Mikrosekunden und Nanosekunden.

    Vorsicht

    Derzeit werden negative Werte immer als Sekunden behandelt. Beispielsweise wird -31.536.000.000.000.000.000 als eine Anzahl von Sekunden vor dem Jahr 1970 behandelt, obwohl seine Skala impliziert, dass es als Nanosekunden verwendet werden soll.

    Dieses Verhalten kann sich in Zukunft möglicherweise ändern.

    Vorsicht

    Warnung vor Veralten: Zukünftige Versionen von Snowflake interpretieren möglicherweise Ganzzahlen in Zeichenfolgen automatisch als Sekunden und nicht als Millisekunden, Mikrosekunden oder Nanosekunden. Snowflake empfiehlt, dass Sie bei Zeichenfolgen, die nur Ganzzahlen enthalten, welche als Sekunden interpretiert werden sollen, TO_DATE oder TO_TIMESTAMP aufrufen.

Beispiele

Die folgenden Beispiele zeigen die Verwendung der Funktion TO_DATE().

SELECT TO_DATE('2013-05-17'), DATE('2013-05-17');
+-----------------------+--------------------+
| TO_DATE('2013-05-17') | DATE('2013-05-17') |
|-----------------------+--------------------|
| 2013-05-17            | 2013-05-17         |
+-----------------------+--------------------+
SELECT TO_DATE('2012.07.23', 'YYYY.MM.DD'), DATE('2012.07.23', 'YYYY.MM.DD');
+-------------------------------------+----------------------------------+
| TO_DATE('2012.07.23', 'YYYY.MM.DD') | DATE('2012.07.23', 'YYYY.MM.DD') |
|-------------------------------------+----------------------------------|
| 2012-07-23                          | 2012-07-23                       |
+-------------------------------------+----------------------------------+
SELECT TO_DATE('1999-01-02', 'AUTO'), DATE('1999-01-02', 'AUTO');
+-------------------------------+----------------------------+
| TO_DATE('1999-01-02', 'AUTO') | DATE('1999-01-02', 'AUTO') |
|-------------------------------+----------------------------|
| 1999-01-02                    | 1999-01-02                 |
+-------------------------------+----------------------------+
SELECT TO_DATE('02/14/2014', 'MM/DD/YYYY'), DATE('02/14/2014', 'MM/DD/YYYY');
+-------------------------------------+----------------------------------+
| TO_DATE('02/14/2014', 'MM/DD/YYYY') | DATE('02/14/2014', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 2014-02-14                          | 2014-02-14                       |
+-------------------------------------+----------------------------------+

Dieses Beispiel zeigt, wie der erste konvertierte Wert steuern kann, ob die nachfolgenden Werte als Sekunden oder Millisekunden interpretiert werden:

Erstellen und laden Sie die Tabelle:

CREATE TABLE demo1 (
    description VARCHAR,
    value VARCHAR -- yes, string rather than bigint
    );

Vergleichen Sie die Ausgabe der folgenden beiden Abfragen. Der einzige Unterschied zwischen den beiden ist die Reihenfolge der Zeilen:

SELECT 
       description, 
       value, 
       TO_TIMESTAMP(value), 
       TO_DATE(value)
    FROM demo1
    ORDER BY value ASC
    ;
+--------------+-------------+-------------------------+----------------+
| DESCRIPTION  | VALUE       | TO_TIMESTAMP(VALUE)     | TO_DATE(VALUE) |
|--------------+-------------+-------------------------+----------------|
| Seconds      | 31535999999 | 2969-05-02 23:59:59.000 | 2969-05-02     |
| Milliseconds | 31536000000 | 2969-05-03 00:00:00.000 | 2969-05-03     |
+--------------+-------------+-------------------------+----------------+
SELECT 
       description, 
       value, 
       TO_TIMESTAMP(value), 
       TO_DATE(value)
    FROM demo1
    ORDER BY value DESC
    ;
+--------------+-------------+-------------------------+----------------+
| DESCRIPTION  | VALUE       | TO_TIMESTAMP(VALUE)     | TO_DATE(VALUE) |
|--------------+-------------+-------------------------+----------------|
| Milliseconds | 31536000000 | 1971-01-01 00:00:00.000 | 1971-01-01     |
| Seconds      | 31535999999 | 1970-12-31 23:59:59.999 | 1970-12-31     |
+--------------+-------------+-------------------------+----------------+