Eingabe- und Ausgabeformate für Datum und Uhrzeit

Unter diesem Thema:

Wie Snowflake die zu verwendenden Eingabe- und Ausgabeformate bestimmt

Um die Eingabe- und Ausgabeformate für Datums-, Uhrzeit- und Zeitstempel zu bestimmen, verwendet Snowflake Folgendes:

Sitzungsparameter für Datum, Uhrzeit und Zeitstempel

Mit einer Reihe von Sitzungsparametern wird bestimmt, wie Datums-, Uhrzeit- und Zeitstempeldaten in und aus Snowflake übertragen werden, sowie die Zeitzone, die in den Uhrzeit- und Zeitstempelformaten verwendet wird, die Zeitzonen unterstützen.

Die Parameter können auf Konto-, Benutzer- und Sitzungsebene eingestellt werden. Führen Sie den Befehl SHOW PARAMETERS aus, um die aktuellen Parametereinstellungen anzuzeigen, die für alle Operationen in der aktuellen Sitzung gelten.

Eingabeformate

Die folgenden Parameter definieren, welche Datums-, Uhrzeit- und Zeitstempelformate für DML erkannt werden, einschließlich der Operationen COPY, INSERT und MERGE:

Die Voreinstellung für alle drei Parameter ist AUTO. Wenn der Parameterwert auf AUTO gesetzt ist, versucht Snowflake, die Datums-, Uhrzeit- und Zeitstempelzeichenfolgen in jedem Eingabeausdruck einem der Formate zuzuordnen, die unter Unterstützte Formate für AUTO-Erkennung aufgeführt sind:

  • Wenn ein passendes Format gefunden wird, akzeptiert Snowflake die Zeichenfolge.

  • Wenn kein passendes Format gefunden wird, gibt Snowflake einen Fehler zurück.

Ausgabeformate

Die folgenden Parameter definieren die Formate für die Datums- und Uhrzeitausgabe von Snowflake:

Darüber hinaus wird mit dem folgenden Parameter der TIMESTAMP-Datentypalias einer der drei TIMESTAMP_*-Varianten zugeordnet:

Zeitzone

Der folgende Parameter bestimmt die Zeitzone:

Dateiformatoptionen zum Laden/Entladen von Datum, Uhrzeit und Zeitstempel

Unabhängig von den Parametern des Ein- und Ausgabeformats bietet Snowflake drei Dateiformatoptionen, die beim Laden von Daten in oder Entladen von Daten aus Snowflake-Tabellen verwendet werden können:

  • DATE_FORMAT

  • TIME_FORMAT

  • TIMESTAMP_FORMAT

Die Optionen können direkt im Befehl COPY oder in einem benannten Stagingbereichs- oder Dateiformatobjekt angegeben werden, auf das im Befehl COPY verwiesen wird. Wenn angegeben, überschreiben diese Optionen die entsprechenden Eingabeformate (beim Laden von Daten) oder Ausgabeformate (beim Entladen von Daten).

Laden von Daten

Wenn die Optionen beim Laden von Daten verwendet werden, legen sie das Format der Datums-, Uhrzeit- und Zeitstempelzeichenfolgen Ihrer Staging-Datendateien fest. Die Optionen überschreiben die Parametereinstellungen DATE_INPUT_FORMAT, TIME_INPUT_FORMAT und TIMESTAMP_INPUT_FORMAT.

Die Standardeinstellung für alle diese Optionen ist AUTO, d. h. der Befehl COPY INTO <Tabelle> versucht, alle Datums- und Zeitstempelzeichenfolgen in den Staging-Datendateien einem der Formate zuzuordnen, die unter Unterstützte Formate für AUTO-Erkennung aufgeführt sind.

  • Wenn ein passendes Format gefunden wird, akzeptiert Snowflake die Zeichenfolge.

  • Wenn kein passendes Format gefunden wird, gibt Snowflake einen Fehler zurück und führt dann die für die Kopieroption ON_ERROR angegebene Aktion aus.

Warnung

Snowflake unterstützt die automatische Erkennung der gängigsten Datums-, Uhrzeit- und Zeitstempelformate (siehe Tabellen unten). Einige Formate können jedoch zu mehrdeutigen Ergebnissen führen, was wiederum dazu führt, dass Snowflake beim Laden von Daten mit der Option AUTO ein falsches Format verwendet.

Um ein korrektes Laden der Daten sicherzustellen, empfehlen wir nachdrücklich, die Dateiformatoptionen für das Laden der Daten explizit festzulegen.

Entladen von Daten

Wenn die Optionen beim Entladen von Daten verwendet werden, geben sie das Format an, das auf Datumsangaben, Uhrzeiten und Zeitstempel angewendet wird, welche in die Dateien des angegebene Stagingbereichs entladen werden.

Die Voreinstellung für alle diese Optionen ist AUTO, was bedeutet, dass Snowflake die in den folgenden Parametern angegebene Formatierung anwendet:

  • DATE_OUTPUT_FORMAT

  • TIME_OUTPUT_FORMAT

  • TIMESTAMP_*_OUTPUT_FORMAT (abhängig von der TIMESTAMP_TYPE_MAPPING-Einstellung)

In Eingabe- und Ausgabeformaten verwendete Elemente

In Eingabe- und Ausgabeformaten, die Sie in Parametern, Dateiformatoptionen und Konvertierungsfunktionen angeben, können Sie die in der folgenden Tabelle aufgeführten Elemente verwenden.

In den nächsten Abschnitten werden ebenfalls diese Elemente verwendet, um die von Snowflake automatisch erkannten Formate zu beschreiben.

Formatelement

Beschreibung

YYYY

Vierstellige Jahresangabe.

YY

Zweistellige Jahresangabe, gesteuert durch den Sitzungsparameter TWO_DIGIT_CENTURY_START, z. B. wenn dieser auf 1980 gesetzt ist, die Werte 79 und 80, die als 2079 bzw. 1980 geparst werden.

MM

Zweistellige Monatsangabe (01=Januar usw.).

MON

Vollständiger oder abgekürzter Monatsname.

MMMM

Vollständiger Monatsname.

DD

Zweistellige Tagesangabe des Monats (01 bis 31).

DY

Abgekürzter Wochentag.

HH24

Zwei Ziffern für die Stunde (00 bis 23). AM/PM dürfen nicht angegeben werden.

HH12

Zwei Ziffern für die Stunde (01 bis 12). AM/PM können angegeben werden.

AM, PM

Ante Meridiem (AM) / Post Meridiem (PM). Verwenden Sie diese Angabe nur mit HH12 (nicht mit HH24).

MI

Zwei Ziffern für die Minute (00 bis 59).

SS

Zwei Ziffern für die Sekunde (00 bis 59).

FF[0-9]

Sekundenbruchteile mit einer Genauigkeit von 0 (Sekunden) bis 9 (Nanosekunden), z. B. FF, FF0, FF3, FF9. Die Angabe von FF entspricht FF9 (Mikrosekunden).

TZH:TZM, TZHTZM, TZH

Zeitzonenstunde und -minute, Offset von UTC. Kann +/- als Vorzeichen erhalten.

Bemerkung

  • Bei Verwendung eines reinen Datumsformats wird davon ausgegangen, dass die zugehörige Uhrzeit Mitternacht an diesem Tag ist.

  • Alles, was im Format zwischen doppelten Anführungszeichen oder anderen als den oben genannten Elementen liegt, wird analysiert und formatiert, ohne interpretiert zu werden.

  • Weitere Informationen zu gültigen Bereichen, die Anzahl der Ziffern und zu bewährten Verfahren finden Sie unter Zusätzliche Informationen zur Verwendung von Datums-, Uhrzeit- und Zeitstempelformaten.

Unterstützte Formate für AUTO-Erkennung

Auf Anweisung erkennt und verarbeitet Snowflake automatisch bestimmte Formate für Datums-, Uhrzeit- und Zeitstempel-Eingabezeichenfolgen. In den folgenden Abschnitten werden die unterstützten Formate beschrieben:

Achtung

Einige Zeichenfolgen können mehreren Formaten entsprechen. Beispiel: „07-04-2016“ ist sowohl mit MM-DD-YYYY als auch mit DD-MM-YYYY kompatibel, hat aber jeweils eine andere Bedeutungen (4. Juli vs. 7. April). Die Tatsache, dass ein passendes Format gefunden wird, garantiert nicht, dass die Zeichenfolge wie vom Benutzer beabsichtigt analysiert wird.

Die automatische Erkennung des Datumsformats ist zwar praktisch, erhöht jedoch die Wahrscheinlichkeit, dass Datumsangaben falsch interpretiert werden. Snowflake empfiehlt daher dringend, das Format explizit anzugeben, anstatt sich auf die automatische Datumserkennung zu verlassen.

Datumsformate

Beschreibungen der in den nachstehenden Formaten verwendeten Elemente finden Sie unter In Eingabe- und Ausgabeformaten verwendete Elemente.

Format

Beispiel

Anmerkungen

ISO-Datumsformate

YYYY-MM-DD

2013-04-28

Andere Datumsformate

DD-MON-YYYY

17-DEC-1980

MM/DD/YYYY

12/17/1980

Beim Laden oder Bearbeiten von Daten in gängigen europäischen Formaten (d. h. DD/MM/YYYY) können falsche Datumswerte entstehen. So könnte beispielsweise „05/02/2013“ als 2. Mai 2013 anstelle von 5. Februar 2013 interpretiert werden.

Bei Verwendung der Datumsformatierung AUTO sind Striche und Schrägstriche nicht austauschbar. Schrägstriche bedeuten das Format MM/DD/YYYY und Bindestriche das Format YYYY-MM-DD. Zeichenfolgen wie „2019/01/02“ oder „01-02-2019“ werden nicht wie erwartet interpretiert.

Uhrzeitformate

Beschreibungen der in den nachstehenden Formaten verwendeten Elemente finden Sie unter In Eingabe- und Ausgabeformaten verwendete Elemente.

Format

Beispiel

Anmerkungen

ISO-Uhrzeitformate

HH24:MI:SS.FFTZH:TZM

20:57:01.123456789+07:00

HH24:MI:SS.FF

20:57:01.123456789

HH24:MI:SS

20:57:01

HH24:MI

20:57

Internet (RFC)-Uhrzeitformate

HH12:MI:SS.FF AM

07:57:01.123456789 AM

HH12:MI:SS AM

04:01:07 AM

HH12:MI AM

04:01 AM

Das Formatelement AM ermöglicht Werte mit AM oder PM.

Bemerkung

Das Formatelement AM darf nur mit HH12 verwendet werden (nicht mit HH24).

Wenn ein Zeitzonenversatz (z. B. „0800“) in einer Uhrzeit- oder Zeitstempel-Zeichenfolge unmittelbar nach einer Ziffer auftritt, muss der Zeitzonenversatz mit + oder - beginnen. Das Vorzeichen verhindert Mehrdeutigkeit, wenn der Sekundenbruchteil oder der Zeitzonenoffset nicht die maximal zulässige Anzahl von Ziffern enthält. Ohne ein Trennzeichen zwischen der letzten Ziffer der Sekundenbruchteile und der ersten Ziffer der Zeitzone könnte z. B. „1“ in der Zeitangabe „04:04:04.321200“ entweder die letzte Ziffer der Sekundenbruchteile (z. B. 321 Millisekunden) oder die erste Ziffer des Zeitzonenversatzes (z. B. 12 Stunden vor UTC) sein.

Zeitstempelformate

Beschreibungen der in den nachstehenden Formaten verwendeten Elemente finden Sie unter In Eingabe- und Ausgabeformaten verwendete Elemente.

Format

Beispiel

Anmerkungen

ISO-Zeitstempelformate**

YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM

2013-04-28T20:57:01.123456789+07:00

Die doppelten Anführungszeichen um das T sind optional (Einzelheiten finden Sie in dem dieser Tabelle folgenden Tipp).

YYYY-MM-DD HH24:MI:SS.FFTZH:TZM

2013-04-28 20:57:01.123456789+07:00

YYYY-MM-DD HH24:MI:SS.FFTZH

2013-04-28 20:57:01.123456789+07

YYYY-MM-DD HH24:MI:SS.FF TZH:TZM

2013-04-28 20:57:01.123456789 +07:00

YYYY-MM-DD HH24:MI:SS.FF TZHTZM

2013-04-28 20:57:01.123456789 +0700

YYYY-MM-DD HH24:MI:SS TZH:TZM

2013-04-28 20:57:01 +07:00

YYYY-MM-DD HH24:MI:SS TZHTZM

2013-04-28 20:57:01 +0700

YYYY-MM-DD"T"HH24:MI:SS.FF

2013-04-28T20:57:01.123456

Die doppelten Anführungszeichen um das T sind optional (Einzelheiten finden Sie in dem dieser Tabelle folgenden Tipp).

YYYY-MM-DD HH24:MI:SS.FF

2013-04-28 20:57:01.123456

YYYY-MM-DD"T"HH24:MI:SS

2013-04-28T20:57:01

Die doppelten Anführungszeichen um das T sind optional (Einzelheiten finden Sie in dem dieser Tabelle folgenden Tipp).

YYYY-MM-DD HH24:MI:SS

2013-04-28 20:57:01

YYYY-MM-DD"T"HH24:MI

2013-04-28T20:57

Die doppelten Anführungszeichen um das T sind optional (Einzelheiten finden Sie in dem dieser Tabelle folgenden Tipp).

YYYY-MM-DD HH24:MI

2013-04-28 20:57

YYYY-MM-DD"T"HH24

2013-04-28T20

Die doppelten Anführungszeichen um das T sind optional (Einzelheiten finden Sie in dem dieser Tabelle folgenden Tipp).

YYYY-MM-DD HH24

2013-04-28 20

YYYY-MM-DD"T"HH24:MI:SSTZH:TZM

2013-04-28T20:57:01-07:00

Die doppelten Anführungszeichen um das T sind optional (Einzelheiten finden Sie in dem dieser Tabelle folgenden Tipp).

YYYY-MM-DD HH24:MI:SSTZH:TZM

2013-04-28 20:57:01-07:00

YYYY-MM-DD HH24:MI:SSTZH

2013-04-28 20:57:01-07

YYYY-MM-DD"T"HH24:MITZH:TZM

2013-04-28T20:57+07:00

Die doppelten Anführungszeichen um das T sind optional (Einzelheiten finden Sie in dem dieser Tabelle folgenden Tipp).

YYYY-MM-DD HH24:MITZH:TZM

2013-04-28 20:57+07:00

Internet (RFC)-Zeitstempelformate

DY, DD MON YYYY HH24:MI:SS TZHTZM

Thu, 21 Dec 2000 16:01:07 +0200

DY, DD MON YYYY HH24:MI:SS.FF TZHTZM

Thu, 21 Dec 2000 16:01:07.123456789 +0200

DY, DD MON YYYY HH12:MI:SS AM TZHTZM

Thu, 21 Dec 2000 04:01:07 PM +0200

DY, DD MON YYYY HH12:MI:SS.FF AM TZHTZM

Thu, 21 Dec 2000 04:01:07.123456789 PM +0200

DY, DD MON YYYY HH24:MI:SS

Thu, 21 Dec 2000 16:01:07

DY, DD MON YYYY HH24:MI:SS.FF

Thu, 21 Dec 2000 16:01:07.123456789

DY, DD MON YYYY HH12:MI:SS AM

Thu, 21 Dec 2000 04:01:07 PM

DY, DD MON YYYY HH12:MI:SS.FF AM

Thu, 21 Dec 2000 04:01:07.123456789 PM

Andere Zeitstempelformate

MM/DD/YYYY HH24:MI:SS

2/18/2008 02:36:48

Beim Laden oder Bearbeiten von Daten in gängigen europäischen Formaten (d. h. DD/MM/YYYY) können falsche Datumswerte entstehen. So könnte beispielsweise „05/02/2013“ als 2. Mai 2013 anstelle von 5. Februar 2013 interpretiert werden.

DY MON DD HH24:MI:SS TZHTZM YYYY

Mon Jul 08 18:09:51 +0000 2013

Wenn ein Zeitzonenversatz (z. B. „0800“) in einer Uhrzeit- oder Zeitstempel-Zeichenfolge unmittelbar nach einer Ziffer auftritt, muss der Zeitzonenversatz mit + oder - beginnen. Das Vorzeichen verhindert Mehrdeutigkeit, wenn der Sekundenbruchteil oder der Zeitzonenoffset nicht die maximal zulässige Anzahl von Ziffern enthält. Ohne ein Trennzeichen zwischen der letzten Ziffer der Sekundenbruchteile und der ersten Ziffer der Zeitzone könnte z. B. „1“ in der Zeitangabe „04:04:04.321200“ entweder die letzte Ziffer der Sekundenbruchteile (z. B. 321 Millisekunden) oder die erste Ziffer des Zeitzonenversatzes (z. B. 12 Stunden vor UTC) sein.

Tipp

In einigen Zeitstempelformaten wird der Buchstabe T als Trennzeichen zwischen Datum und Uhrzeit verwendet (z. B. 'YYYY-MM-DD"T"HH24:MI:SS').

Die doppelten Anführungszeichen um das T sind optional. Snowflake empfiehlt jedoch die Verwendung von doppelten Anführungszeichen um das T (oder andere Literale), um Mehrdeutigkeiten zu vermeiden.

Die doppelten Anführungszeichen sollten nur im Formatbezeichner stehen, nicht in den tatsächlichen Werten. Beispiel:

SELECT TO_TIMESTAMP('2019-02-28T23:59:59', 'YYYY-MM-DD"T"HH24:MI:SS');
Copy

Außerdem müssen die Anführungszeichen um T doppelte Anführungszeichen sein.

Zusätzliche Informationen zur Verwendung von Datums-, Uhrzeit- und Zeitstempelformaten

In den folgenden Abschnitten werden Anforderungen und bewährte Methoden für einzelne Felder in Bezug auf Datum, Uhrzeit und Zeitstempel beschrieben.

Gültige Wertebereiche für Felder

Die empfohlenen Wertebereiche für jedes Feld sind nachstehend aufgeführt:

Feld

Werte

Anmerkungen

Jahre

0001 bis 9999

Einige Werte außerhalb dieses Bereichs werden möglicherweise in bestimmten Kontexten akzeptiert. Snowflake empfiehlt jedoch, nur Werte in diesem Bereich zu verwenden. Beispielsweise wird das Jahr 0000 akzeptiert, ist jedoch falsch, da im Gregorianischen Kalender das Jahr 1 AD unmittelbar nach dem Jahr 1 v. Chr. steht. Es gibt kein Jahr 0.

Monate

01 bis 12

Tage

01 bis 31

In Monaten mit weniger als 31 Tagen ist das tatsächliche Maximum die Anzahl der Tage im Monat.

Stunden

00 bis 23

oder 01-12, wenn Sie das Format HH12 verwenden.

Minuten

00 bis 59

Sekunden

00 bis 59

Snowflake unterstützt weder Schaltsekunden, noch doppelte Schaltsekunden. Die Werte 60 und 61 werden abgelehnt.

Bruchteil

0 bis 999999999

Die Anzahl der Nachkommastellen hängt zum Teil vom genauen Formatbezeichner ab (z. B. unterstützt FF3 bis zu 3 Nachkommastellen und FF9 bis zu 9 Nachkommastellen). Sie können weniger Ziffern eingeben, als Sie angegeben haben (z. B. ist die Eingabe von 1 zulässig, auch wenn Sie FF9 verwenden). Es ist nicht erforderlich, das Feld mit nachstehenden Nullen auf die angegebene Breite aufzufüllen.

Verwenden der korrekten Anzahl von Ziffern mit Formatelementen

Für die meisten Felder (Jahr, Monat, Tag, Stunde, Minute und Sekunde) bestehen die Elemente (YYYY, MM, DD usw.) des Formatspezifizierers aus zwei oder vier Zeichen.

Die folgenden Regeln geben an, wie viele Stellen in den Literalwerten tatsächlich angegeben werden sollen.

  • YYYY: Sie können für die Angabe des Jahres 1, 2, 3 oder 4 Ziffern verwenden. Snowflake empfiehlt jedoch die Angabe von 4 Ziffern. Stellen Sie gegebenenfalls führende Nullen voran. Beispiel: Das Jahr 536 AD würde beispielsweise „0536“ lauten.

  • YY: Verwenden Sie für die Angabe des Jahres 1 oder 2 Ziffern. Snowflake empfiehlt jedoch die Angabe von 2 Ziffern. Stellen Sie gegebenenfalls eine führende Null voran.

  • MM: Geben Sie eine oder zwei Ziffern an. Beispiel: Januar kann mit „01“ oder „1“ angegeben werden. Snowflake empfiehlt die Verwendung von zwei Ziffern.

  • DD: Geben Sie eine oder zwei Ziffern an. Snowflake empfiehlt die Verwendung von zwei Ziffern.

  • HH12 und HH24: Geben Sie eine oder zwei Ziffern an. Snowflake empfiehlt die Verwendung von zwei Ziffern.

  • MI: Geben Sie eine oder zwei Ziffern an. Snowflake empfiehlt die Verwendung von zwei Ziffern.

  • SS: Geben Sie eine oder zwei Ziffern an. Snowflake empfiehlt die Verwendung von zwei Ziffern.

  • FF9: Geben Sie zwischen 1 und 9 Ziffern (einschließlich) an. Snowflake empfiehlt, die tatsächliche Anzahl signifikanter Stellen anzugeben. Nachstehende Nullen sind nicht erforderlich.

  • TZH: Geben Sie eine oder zwei Ziffern an. Snowflake empfiehlt die Verwendung von zwei Ziffern.

  • TZM: Geben Sie eine oder zwei Ziffern an. Snowflake empfiehlt die Verwendung von zwei Ziffern.

Für alle Felder (außer Sekundenbruchteilen) empfiehlt Snowflake die Angabe der maximalen Anzahl von Stellen. Verwenden Sie gegebenenfalls führende Nullen. Beispiel: „0001-02-03 04:05:06 -07:00“ folgt dem empfohlenen Format.

Nachstehende Nullen sind für Sekundenbruchteile optional. Im Allgemeinen wird empfohlen, nur die Anzahl der Stellen anzugeben, die zuverlässig und aussagekräftig sind. Wenn eine Zeitmessung beispielsweise auf 3 Dezimalstellen (Millisekunden) genau ist, kann die Angabe von 9 Ziffern (z. B. „0,123000000“) irreführend sein.

Leerzeichen in Werten und Formatangaben

Snowflake erzwingt das Anpassen von Leerzeichen in einigen, aber nicht allen Situationen. Die folgende Anweisung generiert beispielsweise einen Fehler, da im angegebenen Wert kein Leerzeichen zwischen den Tagen und den Stunden, im Formatbezeichner jedoch ein Leerzeichen zwischen DD und HH vorhanden ist:

SELECT TO_TIMESTAMP('2019-02-2823:59:59 -07:00', 'YYYY-MM-DD HH24:MI:SS TZH:TZM');
Copy

Die folgende Anweisung generiert jedoch keinen Fehler, obwohl der Wert ein Leerzeichen enthält, das im Bezeichner nicht angegeben ist:

SELECT TO_TIMESTAMP('2019-02-28 23:59:59.000000000 -07:00', 'YYYY-MM-DDHH24:MI:SS.FF TZH:TZM');
Copy

Der Grund für den Unterschied liegt darin, dass im ersten Fall die Werte nicht eindeutig wären, wenn nicht alle Felder ihre maximale Breite aufweisen würden. Beispielsweise könnte „213“ als 2 Tage und 13 Stunden oder als 21 Tage und 3 Stunden interpretiert werden. Das Format DDHH ist jedoch eindeutig mit DD HH identisch (bis auf das Leerzeichen).

Tipp

Obwohl einige Leerzeichenunterschiede zulässig sind, um unterschiedlich formatierte Daten zu verarbeiten, empfiehlt Snowflake, dass Werte und Bezeichner auch hinsichtlich der Leerzeichen genau übereinstimmen.

Kontextabhängigkeit

Nicht alle Einschränkungen werden in allen Kontexten gleichermaßen durchgesetzt. Beispielsweise können einige Ausdrücke den 31. Februar als Übertrag interpretieren, andere möglicherweise nicht.

Zusammenfassung der Best Practices für die Angabe des Formats

Die folgenden bewährten Methoden minimieren Mehrdeutigkeiten und andere potenzielle Probleme in früheren, aktuellen und geplanten zukünftigen Versionen von Snowflake:

  • Beachten Sie die Gefahren beim Mischen von Daten aus Quellen, die unterschiedliche Formate verwenden, z. B. beim Mischen von Daten, die dem allgemeinen US-Format MM-DD-YYYY und dem allgemeinen europäischen Format DD-MM-YYYY entsprechen.

  • Geben Sie die maximale Anzahl von Stellen für jedes Feld an (außer Sekundenbruchteile). Verwenden Sie beispielsweise 4-stellige Jahresangaben, und geben Sie gegebenenfalls führende Nullen an.

  • Geben Sie in einem Zeitstempel zwischen Datum und Uhrzeit ein Leerzeichen oder den Buchstaben T an.

  • Leerzeichen (und das optionale T-Trennzeichen zwischen Datum und Uhrzeit) sollten in den Werten und im Formatbezeichner identisch sein.

  • Verwenden Sie die Intervallarithmetik, wenn Sie einen Übertrag benötigen.

  • Seien Sie vorsichtig, wenn Sie die AUTO-Formatierung verwenden. Geben Sie nach Möglichkeit das Format an, und stellen Sie sicher, dass die Werte immer dem angegebenen Format entsprechen.

  • Formate sollten aus Sicherheitsgründen besser innerhalb eines Befehl als außerhalb angegeben werden, beispielsweise in einem Parameter wie DATE_INPUT_FORMAT (siehe Beispiel unten).

  • Stellen Sie beim Verschieben von Skripten von einer Umgebung in eine andere sicher, dass datumsbezogene Parameter wie DATE_INPUT_FORMAT in der neuen Umgebung dieselben sind wie in der alten Umgebung (vorausgesetzt, die Werte haben auch dasselbe Format).

Datums- und Uhrzeitfunktionen

Snowflake bietet eine Reihe von Funktionen zum Erstellen, Konvertieren, Extrahieren oder Ändern von DATE/TIME/TIMESTAMP-Daten. Weitere Informationen dazu finden Sie unter Datums- und Uhrzeitfunktionen.

AUTO-Erkennung von als Ganzzahl gespeicherten Datums-, Uhrzeit- und Zeitstempelwerten

Für Ganzzahlen von Sekunden oder Millisekunden, die in einer Zeichenfolge gespeichert sind, versucht Snowflake, die korrekte Maßeinheit anhand der Länge des Wertes zu ermitteln.

Bemerkung

Die Verwendung von Ganzzahlen in Anführungszeichen als Eingabewerte ist veraltet.

Um beispielsweise den Zeitstempel zu berechnen, der 1487654321 Sekunden seit Beginn der Unix-Epoche entspricht, gehen Sie wie folgt vor:

select to_timestamp('1487654321');
-------------------------------+
  TO_TIMESTAMP('1487654321')   |
-------------------------------+
 2017-02-20 21:18:41.000000000 |
-------------------------------+
Copy

Hier ist eine ähnliche Berechnung mit Millisekunden seit Beginn der Epoche:

select to_timestamp('1487654321321');
-------------------------------+
 TO_TIMESTAMP('1487654321321') |
-------------------------------+
 2017-02-20 21:18:41.321000000 |
-------------------------------+
Copy

Je nach Größe des Wertes verwendet Snowflake eine andere Maßeinheit:

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

    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.

    Bemerkung

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

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

In Fällen, in denen formatierte Zeichenfolgen und ganze Zahlen in Zeichenfolgen an die Funktion übergeben werden, wird jeder Wert entsprechend dem Inhalt der Zeichenfolge umgewandelt. Wenn Sie z. B. eine datumsformatierte Zeichenfolge und eine Zeichenfolge mit einer ganzen Zahl an TO_TIMESTAMP übergeben, interpretiert die Funktion jeden Wert korrekt, je nachdem, was die Zeichenfolge enthält:

select to_timestamp(column1) from values ('2013-04-05'), ('1487654321');
+-------------------------+
| TO_TIMESTAMP(COLUMN1)   |
|-------------------------|
| 2013-04-05 00:00:00.000 |
| 2017-02-21 05:18:41.000 |
+-------------------------+
Copy

Best Practices zu Formaten in Datums- und Uhrzeitfunktionen

Die AUTO-Erkennung bestimmt normalerweise das korrekte Eingabeformat. Es gibt jedoch Situationen, in denen es möglicherweise nicht möglich ist, die korrekte Bestimmung vorzunehmen.

Um dies zu vermeiden, empfiehlt Snowflake dringend die folgenden Best Practices (Ersetzen von TO_DATE , DATE oder TO_TIME , TIME für TO_TIMESTAMP):

  • Vermeiden Sie die Verwendung des Formats AUTO, wenn mehrdeutige Ergebnisse möglich sind. Geben Sie eine explizite Formatzeichenfolge wie folgt an:

  • Bei Zeichenfolgen, die ganzzahlige Werte enthalten, geben Sie folgende Größe an:

    TO_TIMESTAMP(TO_NUMBER(<string_column>), <scale>)
    
    Copy