Kategorien:

Konvertierungsfunktionen, Datums- und Uhrzeitfunktionen

TO_DATE , DATE

Konvertiert einen Eingabeausdruck in ein Datum:

  • Bei einem VARCHAR-Ausdruck das Ergebnis der Konvertierung der Zeichenfolge in ein Datum.

  • Bei einem TIMESTAMP-Ausdruck das Datum des Zeitstempels.

  • Bei einem VARIANT-Ausdruck:

    • Wenn der VARIANT-Wert eine Zeichenfolge ist, wird eine Zeichenfolgenkonvertierung ausgeführt.

    • Wenn der VARIANT-Wert ein Datum enthält, bleibt der Datumswert unverändert.

    • Wenn der VARIANT-Wert einen JSON-Nullwert enthält, ist 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> )
Copy

Argumente

Benötigt:

Eine der folgenden Optionen:

string_expr

Zeichenfolge, aus der ein Datumswert extrahiert werden soll. Beispiel: '2024-01-31'.

timestamp_expr

TIMESTAMP-Ausdruck. Der DATE-Teil des TIMESTAMP-Werts wird extrahiert.

'integer'

Ein Ausdruck, der eine Zeichenfolge ergibt, die eine Ganzzahl enthält. Beispiel: '15000000'. Abhängig von der Größenordnung der Zeichenfolge kann der Wert als Sekunden, Millisekunden, Mikrosekunden oder Nanosekunden interpretiert werden. Weitere Informationen zu dieser Funktion finden Sie in den Nutzungshinweisen.

variant_expr

Ein Ausdruck vom Typ VARIANT.

Der VARIANT-Ausdruck muss einen der folgenden Typen enthalten:

  • Zeichenfolge, aus der ein Zeitstempel extrahiert werden soll.

  • Ein Datum.

  • Eine Zeichenfolge mit einer Ganzzahl, die die Anzahl der Sekunden oder Millisekunden repräsentiert.

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

Optional:

format

Datumsformatspezifizier 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.

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

Rückgabewerte

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

Nutzungshinweise

  • Das Anzeigeformat für Datumswerte in der Ausgabe wird durch den Sitzungsparameter DATE_OUTPUT_FORMAT bestimmt (Standard: YYYY-MM-DD).

  • 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 (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.

Beispiele

Die folgenden Beispiele verwenden die Funktionen TO_DATE und DATE.

Grundlegendes Beispiel

SELECT TO_DATE('2024-05-10'), DATE('2024-05-10');
Copy
+-----------------------+--------------------+
| TO_DATE('2024-05-10') | DATE('2024-05-10') |
|-----------------------+--------------------|
| 2024-05-10            | 2024-05-10         |
+-----------------------+--------------------+

Beispiel, in dem das Datum aus einem Zeitstempel extrahiert wird

Die Funktion TO_DATE akzeptiert TIMESTAMP-Wert und sogar Zeichenfolgen im TIMESTAMP-Format, verwirft aber die Zeitinformationen (Stunden, Minuten usw.).

Erstellen und Laden der Tabelle:

CREATE OR REPLACE TABLE date_from_timestamp(ts TIMESTAMP);

INSERT INTO date_from_timestamp(ts)
  VALUES (TO_TIMESTAMP('2024.10.02 04:00:00', 'YYYY.MM.DD HH:MI:SS'));
Copy

Abfrage TIMESTAMP-Werts in der Tabelle:

SELECT ts FROM date_from_timestamp;
Copy
+-------------------------+
| TS                      |
|-------------------------|
| 2024-10-02 04:00:00.000 |
+-------------------------+

Abfrage des TIMESTAMP-Werts in der Tabelle mit der Funktion TO_DATE:

SELECT TO_DATE(ts) FROM date_from_timestamp;
Copy
+-------------+
| TO_DATE(TS) |
|-------------|
| 2024-10-02  |
+-------------+

Beispiele, die verschiedene Eingabeformate verwenden

Die folgenden Beispiele verwenden die Funktionen TO_DATE und DATE mit unterschiedlichen Eingabeformaten. Das Datumsformat in der zurückgegebenen Ausgabe wird durch die Einstellung des Sitzungsparameters DATE_OUTPUT_FORMAT bestimmt.

SELECT TO_DATE('2024.05.10', 'YYYY.MM.DD'), DATE('2024.05.10', 'YYYY.MM.DD');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('2024.05.10', 'YYYY.MM.DD') | DATE('2024.05.10', 'YYYY.MM.DD') |
|-------------------------------------+----------------------------------|
| 2024-05-10                          | 2024-05-10                       |
+-------------------------------------+----------------------------------+
SELECT TO_DATE('2024-05-10', 'AUTO'), DATE('2024-05-10', 'AUTO');
Copy
+-------------------------------+----------------------------+
| TO_DATE('2024-05-10', 'AUTO') | DATE('2024-05-10', 'AUTO') |
|-------------------------------+----------------------------|
| 2024-05-10                    | 2024-05-10                 |
+-------------------------------+----------------------------+
SELECT TO_DATE('05/10/2024', 'MM/DD/YYYY'), DATE('05/10/2024', 'MM/DD/YYYY');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('05/10/2024', 'MM/DD/YYYY') | DATE('05/20/2024', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 2024-05-10                          | 2024-05-20                       |
+-------------------------------------+----------------------------------+

Beispiele, die verschiedene Ausgabeformate verwenden

Die folgenden Beispiele zeigen die Ergebnisse von Abfragen, wenn der Sitzungsparameter DATE_OUTPUT_FORMAT auf DD-MON-YYYY gesetzt ist:

ALTER SESSION SET DATE_OUTPUT_FORMAT = 'DD-MON-YYYY';
Copy
SELECT TO_DATE('2024-05-10', 'YYYY-MM-DD'), DATE('2024-05-10', 'YYYY-MM-DD');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('2024-05-10', 'YYYY-MM-DD') | DATE('2024-05-10', 'YYYY-MM-DD') |
|-------------------------------------+----------------------------------|
| 10-May-2024                         | 10-May-2024                      |
+-------------------------------------+----------------------------------+
SELECT TO_DATE('05/10/2024', 'MM/DD/YYYY'), DATE('05/10/2024', 'MM/DD/YYYY');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('05/10/2024', 'MM/DD/YYYY') | DATE('05/10/2024', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 10-May-2024                         | 10-May-2024                      |
+-------------------------------------+----------------------------------+

Beispiele, die eine Zeichenfolge verwenden, die eine Ganzzahl enthält

Wenn es sich bei der Eingabe um eine Zeichenfolge handelt, die eine ganze Zahl enthält, beeinflusst die Größe dieser ganzen Zahl, ob sie als Sekunden, Millisekunden usw. interpretiert wird. Das folgende Beispiel zeigt, wie die Funktion die zu verwendenden Einheiten (Sekunden, Millisekunden, Mikrosekunden oder Nanosekunden) auf der Grundlage der Größe des Wertes auswählt:

Erstellen und Laden der Tabelle:

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

INSERT INTO demo1 (description, value) VALUES
  ('Seconds',      '31536000'),
  ('Milliseconds', '31536000000'),
  ('Microseconds', '31536000000000'),
  ('Nanoseconds',  '31536000000000000');
Copy

Übergeben der Zeichenfolge an die Funktion:

SELECT description,
       value,
       TO_TIMESTAMP(value),
       TO_DATE(value)
  FROM demo1
  ORDER BY value;
Copy
+--------------+-------------------+-------------------------+----------------+
| DESCRIPTION  | VALUE             | TO_TIMESTAMP(VALUE)     | TO_DATE(VALUE) |
|--------------+-------------------+-------------------------+----------------|
| Seconds      | 31536000          | 1971-01-01 00:00:00.000 | 1971-01-01     |
| Milliseconds | 31536000000       | 1971-01-01 00:00:00.000 | 1971-01-01     |
| Microseconds | 31536000000000    | 1971-01-01 00:00:00.000 | 1971-01-01     |
| Nanoseconds  | 31536000000000000 | 1971-01-01 00:00:00.000 | 1971-01-01     |
+--------------+-------------------+-------------------------+----------------+