Datentypen für Datum und Uhrzeit

Snowflake unterstützt Datentypen zum Verwalten von Datumsangaben, Uhrzeiten und Zeitstempeln (Kombination aus Datum und Uhrzeit) Snowflake unterstützt auch Formate für Zeichenfolgen, die bei der Bearbeitung von Datumsangaben, Uhrzeiten und Zeitstempeln verwendet werden.

Datentypen

Snowflake unterstützt die folgenden Datums- und Zeitdatentypen:

Bemerkung

Für DATE- und TIMESTAMP-Daten empfiehlt Snowflake die Verwendung von Jahreswerten zwischen 1582 und 9999. Snowflake akzeptiert einige Jahre außerhalb dieses Bereichs, aber Jahre vor 1582 sollten aufgrund von Einschränkungen im Gregorianischen Kalender vermieden werden.

DATE

Snowflake unterstützt nur einen DATE-Datentyp zum Speichern von Datumsangaben (ohne Zeitelemente).

DATE akzeptiert Datumsangaben in den gebräuchlichsten Formen (YYYY-MM-DD, DD-MON-YYYY und so weiter).

Darüber hinaus sind alle akzeptierten TIMESTAMP-Werte auch gültige Eingaben für Datumsangaben, allerdings wird die TIME-Information abgeschnitten.

DATETIME

DATETIME ist gleichbedeutend mit TIMESTAMP_NTZ.

Interval-Datentypen

Intervall-Datentypen speichern Werte, die eine Zeitdauer darstellen. Sie können ein Intervall als die Differenz zwischen zwei Datumsangaben oder Uhrzeiten berechnen. Ein Intervall definiert nur eine Dauer, hat also keinen zeitlichen Start- oder Endpunkt. Sie könnten zum Beispiel ein Intervall von drei Jahren und sieben Monaten definieren.

Snowflake unterstützt die folgenden Jahr-Monat-Varianten von Intervall-Datentypen:

Datentyp

Beschreibung

INTERVAL-YEAR

Stellt eine Zeitdauer in Jahren dar.

INTERVAL YEAR TO MONTH

Stellt eine Zeitdauer in Jahren und Monaten dar.

INTERVAL-MONTH

Stellt eine Zeitdauer in Monaten dar.

Snowflake unterstützt die folgenden Tag-Uhrzeit-Varianten von Intervall-Datentypen:

Datentyp

Beschreibung

INTERVAL-DAY

Stellt eine Zeitdauer in Tagen dar.

INTERVAL DAY TO HOUR

Stellt eine Zeitdauer in Tagen und Stunden dar.

INTERVAL DAY TO MINUTE

Stellt eine Zeitdauer in Tagen, Stunden und Minuten dar.

INTERVAL DAY TO SECOND

Stellt eine Zeitdauer in Tagen, Stunden, Minuten, Sekunden und Sekundenbruchteilen dar.

INTERVAL-HOUR

Stellt eine Zeitdauer in Stunden dar.

INTERVAL HOUR TO MINUTE

Stellt eine Zeitdauer in Stunden und Minuten dar.

INTERVAL HOUR TO SECOND

Stellt eine Zeitdauer in Stunden, Minuten, Sekunden und Sekundenbruchteilen dar.

INTERVAL-MINUTE

Stellt eine Zeitdauer in Minuten dar.

INTERVAL MINUTE TO SECOND

Stellt eine Zeitdauer in Minuten, Sekunden und Sekundenbruchteilen dar.

INTERVAL-SECOND

Stellt eine Zeitdauer in Sekunden und Sekundenbruchteilen dar.

In den folgenden Abschnitten werden die Intervall-Datentypen näher beschrieben:

Bemerkung

Sie können auch Intervallkonstanten für Datums- und Zeitberechnungen. Allerdings unterstützen Intervallkonstanten keine Intervallspeicherung als Spaltentyp.

Vorteile von Intervall-Datentypen

Intervall-Datentypen bieten die folgenden Vorteile:

  • Sorgen für eine genaue Datumsberechnung ohne Mehrdeutigkeiten.

  • Eliminieren die Notwendigkeit von manueller Konvertierung und Umwandlung von ganzzahlbasierten Zeitdauern.

  • Optimieren der Speicherung für Daten, die Zeitintervalle darstellen.

  • Optimieren der Abfrageausführung für Zeitdauerdaten.

  • Vereinfachen der Migration von Daten aus Datenbanken von Drittanbietern wie Databricks, Oracle und Teradata.

  • Vollständige Einhaltung von ANSI-Standards.

Syntax von Intervall-Datentypen

Um einen Intervall-Datentyp anzugeben, verwenden Sie die folgende Syntax:

INTERVAL { yearMonthQualifier | dayTimeQualifier }

Wobei:

yearMonthQualifier ::=
  {
    YEAR [ (<precision>) ] [ TO MONTH ]
    | MONTH [ (<precision>) ]
  }
dayTimeQualifier ::=
  {
    DAY [ (<precision>) ] [ TO { HOUR | MINUTE | SECOND [ (<fractional_seconds_precision>) ] } ]
    | HOUR [ (<precision>) ] [ TO { MINUTE | SECOND [ (<fractional_seconds_precision>) ] } ]
    | MINUTE [ (<precision>) ] [ TO SECOND [ (<fractional_seconds_precision>) ] ]
    | SECOND [ (<precision>) [ , (<fractional_seconds_precision>) ] ]
  }

Eigenschaften:

  • precision ist die Gesamtzahl der zulässigen Stellen. Die Genauigkeit kann zwischen 1 und 9 liegen.

    Standard: 9

  • fractional_seconds_precision ist die Anzahl der Ziffern im Bruchteil einer Sekunde. Die Zeitgenauigkeit kann zwischen 0 (Sekunden) und 9 (Nanosekunden) liegen.

    Standard: 9

Verwenden Sie diese Syntax, wenn Sie einen Intervall-Datentyp angeben. Die folgende Tabelle hat zum Beispiel eine duration-Spalte vom Typ INTERVAL YEAR TO MONTH:

CREATE OR REPLACE TEMPORARY TABLE sample_table_with_interval (
  id VARCHAR,
  duration INTERVAL YEAR(2) TO MONTH);

Darstellung von Intervallwerten

Sie können einen Intervallwert mithilfe eines Intervall-Literals oder eines Intervallformats darstellen:

Intervall-Literale

Ein Intervall-Literal ist ein Ausdruck, der eine Zeitdauer in einem Zeichenfolgenliteral angibt. Verwenden Sie die folgende Syntax, um ein Intervall-Literal anzugeben:

INTERVAL '[ <sign> ] <string>' { <yearMonthQualifier> | <dayTimeQualifier> }

Wobei:

  • sign ist ein optionales Symbol, das eine positive (+) oder negative (-) Zeitdauer angibt.

    Standard: +.

  • string ist ein Wert, der eine Zeitdauer repräsentiert.

  • yearMonthQualifier ist ein Qualifizierer, der in Syntax von Intervall-Datentypen definiert ist.

  • dayTimeQualifier ist ein Qualifizierer, der in Syntax von Intervall-Datentypen definiert ist.

Intervallformate

Zeichenfolgenliterale in bestimmten Formaten können Intervallwerte darstellen.

Um Werte für Jahre und Monate anzugeben, verwenden Sie das folgende Format:

'<sign><Y>-<MM>'

Wobei:

  • sign ist ein erforderliches Symbol, das eine positive (+) oder negative (-) Zeitdauer angibt.

    Standard: +.

  • Y ist die Anzahl der Jahre. Die Anzahl der zulässigen Stellen (Genauigkeit) hängt vom Datentyp des Wertes ab.

  • MM sind zwei Ziffern für die Anzahl der Monate, von 00 bis``11``.

Um Werte für Tage, Stunden, Sekunden und Sekundenbruchteile anzugeben, verwenden Sie das folgende Format:

'<sign>[<D>] [<HH24>]:[<MI>]:[<SS>].[<F>]'

Wobei:

  • sign ist ein erforderliches Symbol, das eine positive (+) oder negative (-) Zeitdauer angibt.

    Standard: +.

  • D ist die Anzahl der Tage. Die Anzahl der zulässigen Stellen (Genauigkeit) hängt vom Datentyp des Wertes ab.

    Lassen Sie D für Werte der folgenden Typen weg:

    • INTERVAL-HOUR

    • INTERVAL HOUR TO MINUTE

    • INTERVAL HOUR TO SECOND

    • INTERVAL-MINUTE

    • INTERVAL MINUTE TO SECOND

    • INTERVAL-SECOND

  • HH24 sind zwei Ziffern für die Anzahl der Stunden, von 00 bis 23.

    Lassen Sie HH24 für Werte der folgenden Typen weg:

    • INTERVAL-DAY

    • INTERVAL-MINUTE

    • INTERVAL MINUTE TO SECOND

    • INTERVAL-SECOND

  • MI sind zwei Ziffern für die Anzahl der Minuten, von 00 bis``59``.

    Lassen Sie MI für Werte der folgenden Typen weg:

    • INTERVAL DAY TO HOUR

    • INTERVAL-DAY

    • INTERVAL-HOUR

    • INTERVAL-SECOND

  • SS sind zwei Ziffern für die Anzahl der Sekunden, von 00 bis``59``.

    Lassen Sie SS für Werte der folgenden Typen weg:

    • INTERVAL-DAY

    • INTERVAL DAY TO HOUR

    • INTERVAL DAY TO MINUTE

    • INTERVAL-HOUR

    • INTERVAL HOUR TO MINUTE

    • INTERVAL-MINUTE

  • F ist die Anzahl der Sekundenbruchteile für die Datentypen, die Sekunden enthalten. Die Anzahl der zulässigen Stellen (Genauigkeit) hängt vom Datentyp des Wertes ab.

Die folgenden Nutzungshinweise gelten für Zeichenfolgenliterale im Intervallformat:

  • Die Darstellung des Zeichenfolgenliterals gilt, wenn Sie die Funktion CAST oderTO_CHAR verwenden, um Intervalle explizit in Textzeichenfolgen umzuwandeln.

  • Führende Nullen in einem Feld geben die Genauigkeit an.

Beispiele für Intervallwerte

Die folgende Tabelle zeigt, wie Sie verschiedene Intervallwerte darstellen können. Die in der Tabelle angezeigten Werte entsprechen den folgenden Regeln für Intervallwerte:

  • Bei positiven Werten ist das Pluszeichen:code:+ optional für Intervall-Literalwerte, aber erforderlich für Intervallformatwerte.

  • In den Intervall-Literalwerten gibt der Wert in Klammern die Genauigkeit an, d. h. die Anzahl der zulässigen Stellen. Beispiel: YEAR(3) legt fest, dass drei Ziffern für das Jahr zulässig sind.

  • In den Intervallformatwerten enthält das primäre Feld (das führende Feld) keine führenden Nullen. Untergeordnete Felder verwenden eine feste Anzahl von Ziffern. Beispiel: In einem YEAR TO MONTH-Wert wie +1-08 enthält das Jahresfeld keine führenden Nullen, und das Monatsfeld verwendet zwei Ziffern.

Dauer

Typ

Intervall-Literalwert

Intervallformatwert

Positive 5 Jahre

INTERVAL-YEAR

INTERVAL '5' YEAR(2)

'+5'

Positives 1 Jahr und 8 Monate

INTERVAL YEAR TO MONTH

INTERVAL '1-08' YEAR(3) TO MONTH

'+001-08'

Negative 5 Monate

INTERVAL-MONTH

INTERVAL '-5' MONTH(2)

'-5'

Positive 14 Monate

INTERVAL-MONTH

INTERVAL '14' MONTH(2)

'+14'

Negative 44 Jahre und 11 Monate

INTERVAL YEAR TO MONTH

INTERVAL '-44-11' YEAR(2) TO MONTH

'-44-11'

Positive 11 Tage, 10 Stunden und 9 Minuten

INTERVAL DAY TO MINUTE

INTERVAL '11 10:09' DAY(2) TO MINUTE

'+11 10:09'

Positive 2 Tage, 23 Stunden, 8 Minuten, 23 Sekunden und 275 Millisekunden

INTERVAL DAY TO SECOND

INTERVAL '02 23:08:23.275' DAY(2) TO SECOND(3)

'+2 23:08:23.275'

Positive 4 Sekunden und 300 Millisekunden

INTERVAL-SECOND

INTERVAL '4.3' SECOND(5, 6)

'+4.300000'

Operationen, die Datums- und Zeitwerte beinhalten

Die folgende Tabelle zeigt den Datentyp des Ergebnisses für gültige Rechenoperationen, die Intervallwerte beinhalten:

Erster Operand

Operator

Zweiter Operand

Ergebnistyp

Zeitstempel

-

Zeitstempel

Ein Intervall-Datentyp

Datum oder Zeitstempel

+

Intervall

DATE, DATETIME, TIMESTAMP_LTZ, TIMESTAMP_NTZ oder TIMESTAMP_TZ

Datum oder Zeitstempel

-

Intervall

DATE, DATETIME, TIMESTAMP_LTZ, TIMESTAMP_NTZ oder TIMESTAMP_TZ

Intervall

+

Datum oder Zeitstempel

DATE, DATETIME, TIMESTAMP_LTZ, TIMESTAMP_NTZ oder TIMESTAMP_TZ

Numerisch

*

Intervall

Ein Intervall-Datentyp

Intervall

*

Numerisch

Ein Intervall-Datentyp

Intervall

/

Numerisch

Ein Intervall-Datentyp

Intervall

+

Intervall

Ein Intervall-Datentyp

Intervall

-

Intervall

Ein Intervall-Datentyp

Bei Operationen, die zwei Intervallwerte beinhalten, müssen die beiden Werte für Jahr-Monat-Intervalle oder beide Werte für Tag-Uhrzeit-Intervalle sein. Operationen, die Jahr-Monat-Intervallwerte und Tag-Uhrzeit-Intervallwerte mischen, werden nicht unterstützt. Wenn die Operation zwei Jahr-Monat-Intervallwerte umfasst, ist der Ergebnistyp ein Jahr-Monat-Intervalltyp. Wenn die Operation zwei Tag-Uhrzeit-Intervallwerte umfasst, ist der Ergebnistyp ein Tag-Uhrzeit-Intervalltyp.

Funktionen, die Intervallwerte als Argumente akzeptieren

Die folgenden Funktionen akzeptieren Intervallwerte als Argumente:

Beispiele für Intervall-Datentypen

Die folgenden Beispiele zeigen, wie Sie Intervall-Datentypen verwenden:

Durchführen von Arithmetik unter Verwendung von Intervalldaten

Die folgenden Beispiele führen Arithmetik unter Verwendung von Intervalldaten aus.

Hinzufügen von einem Jahr und einem Monats zu einem Datum:

SELECT TO_DATE('2024-01-01') + INTERVAL '1-1' YEAR TO MONTH
  AS date_plus_one_year_one_month;
+------------------------------+
| DATE_PLUS_ONE_YEAR_ONE_MONTH |
|------------------------------|
| 2025-02-01                   |
+------------------------------+

Abziehen von einem Jahr und einem Monat von einem Datum:

SELECT TO_DATE('2024-01-01') + INTERVAL '-1-1' YEAR TO MONTH
  AS date_plus_one_year_one_month;
+------------------------------+
| DATE_PLUS_ONE_YEAR_ONE_MONTH |
|------------------------------|
| 2022-12-01                   |
+------------------------------+

Hinzufügen von einem bestimmten Zeitraum zu einem Zeitstempel:

SELECT TO_TIMESTAMP('2024-01-01 08:08:08.99') + INTERVAL '1 01:01:01.7878' DAY TO SECOND
  AS date_plus_period_of_time;
+--------------------------+
| DATE_PLUS_PERIOD_OF_TIME |
|--------------------------|
| 2024-01-02 09:09:10.777  |
+--------------------------+

Im folgenden Beispiel wird die Funktion :doc:`/sql-reference/functions/system_typeof`verwendet, um zu zeigen, dass ein INTERVAL DAY TO SECOND-Wert zurückgegeben wird, wenn eine Abfrage zwei Zeitstempelwerte abzieht:

SELECT SYSTEM$TYPEOF(TO_TIMESTAMP('2025-10-05 01:02:03') - TO_TIMESTAMP('2025-09-15 11:36:22'))
  AS type;
+------------------------------------+
| TYPE                               |
|------------------------------------|
| INTERVAL DAY(9) TO SECOND(9)[SB16] |
+------------------------------------+

Um die Ergebnisse der Abfrage im Intervallformat anzuzeigen, können Sie den Ausdruck in den Datentyp INTERVAL DAY(2) TO SECOND(2) umwandeln, um die Genauigkeit anzugeben, und dann in VARCHAR umwandeln:

SELECT (TO_TIMESTAMP('2025-10-05 01:02:03') - TO_TIMESTAMP('2025-09-15 11:36:22'))::INTERVAL DAY(2) TO SECOND(2)::VARCHAR
  AS interval_format_result;
+------------------------+
| INTERVAL_FORMAT_RESULT |
|------------------------|
| +19 13:25:41.00        |
+------------------------+
Einfügen und Abfragen von Jahr-Monat-Intervalldaten

Erstellen Sie eine Tabelle, die Kandidaten für offene Stellen mit einer INTERVAL YEAR TO MONTH-Spalte verfolgt, und fügen Sie Daten ein:

CREATE OR REPLACE TABLE candidates (
  name_first VARCHAR,
  name_last VARCHAR,
  duration_of_experience INTERVAL YEAR(2) TO MONTH);

INSERT INTO candidates VALUES ('Jane', 'Smith', '14-4');
INSERT INTO candidates VALUES ('Robert', 'Adams', '0-3');
INSERT INTO candidates VALUES ('Mary', 'Jones', '5-11');

Wenn Sie die Tabelle abfragen, ohne die duration_of_experience`-Spalte in einen Datentyp umzuwandeln, enthält die Ausgabe die Werte der Spalte als Gesamtzahl der Monate in jeder Zeile:

SELECT name_first,
       name_last,
       duration_of_experience AS months_of_experience
  FROM candidates;
+------------+-----------+----------------------+
| NAME_FIRST | NAME_LAST | MONTHS_OF_EXPERIENCE |
|------------+-----------+----------------------|
| Jane       | Smith     |                  172 |
| Robert     | Adams     |                    3 |
| Mary       | Jones     |                   71 |
+------------+-----------+----------------------+

Wenn Sie die Tabelle abfragen und die duration_of_experience-Spalte in den VARCHAR-Datentyp umwandeln, zeigt die Ausgabe die Spaltenwerte im Intervallformat an:

SELECT name_first,
       name_last,
       duration_of_experience::VARCHAR AS duration_of_experience
  FROM candidates;
+------------+-----------+------------------------+
| NAME_FIRST | NAME_LAST | DURATION_OF_EXPERIENCE |
|------------+-----------+------------------------|
| Jane       | Smith     | +14-04                 |
| Robert     | Adams     | +0-03                  |
| Mary       | Jones     | +5-11                  |
+------------+-----------+------------------------+
Einfügen und Abfragen von Tag-Uhrzeit-Intervalldaten

Erstellen Sie eine Tabelle, die die Timeout-Dauer für verschiedene Software-Features mit einer INTERVAL HOUR TO SECOND-Spalte angibt, und fügen Sie Daten ein:

CREATE OR REPLACE TABLE feature_timeouts (
  feature VARCHAR,
  timeout_duration INTERVAL HOUR(2) TO SECOND(0));

INSERT INTO feature_timeouts VALUES ('Feature1', '00:00:30');
INSERT INTO feature_timeouts VALUES ('Feature2', '00:10:00');
INSERT INTO feature_timeouts VALUES ('Feature3', '01:00:00');

Fragen Sie die Tabelle ab, und wandeln Sie die timeout_duration-Spalte in den VARCHAR-Datentyp um:

SELECT feature,
       timeout_duration::VARCHAR AS timeout_duration
  FROM feature_timeouts;
+----------+------------------+
| FEATURE  | TIMEOUT_DURATION |
|----------+------------------|
| Feature1 | +0:00:30         |
| Feature2 | +0:10:00         |
| Feature3 | +1:00:00         |
+----------+------------------+
Kopieren von Intervalldaten in eine Tabelle und Abfragen der Tabelle

Führen Sie die folgenden Schritte aus, um eine Datei mit Intervalldaten bereitzustellen, und kopieren Sie die Datei dann in eine Tabelle:

  1. Kopieren Sie den folgenden Inhalt in eine Datei in Ihrem Dateisystem:

    1,1-2,28 16:15:14.0
    2,-3-2,-54 16:15:14.123
    

    In diesem Beispiel wird davon ausgegangen, dass die Datei interval_values.csv heißt und sich im Verzeichnis /examples/intervals/ befindet.

  2. Erstellen Sie einen Stagingbereich:

    CREATE STAGE interval_stage;
    
  3. Stellen Sie die Datei im internen Staging-Speicherort bereit:

    PUT file:///examples/intervals/interval_values.csv @~/interval_stage
      AUTO_COMPRESS=false;
    
  4. Erstellen Sie eine Tabelle für die Daten:

    CREATE OR REPLACE TABLE sample_interval_values(
      c1 STRING,
      c2 INTERVAL YEAR(1) TO MONTH,
      c3 INTERVAL DAY(2) TO SECOND(3));
    
  5. Um die Stagingdatei in die von Ihnen erstellte Tabelle zu laden, verwenden Sie den Befehl COPY INTO <Tabelle>:

    COPY INTO sample_interval_values FROM @~/interval_stage;
    
  6. Um die geladenen Daten anzuzeigen, fragen Sie die Tabelle ab und wandeln Sie sie in den VARCHAR-Typ um:

    SELECT c1,
           c2::VARCHAR AS YEAR_TO_MONTH,
           c3::VARCHAR AS DAY_TO_SECOND,
      FROM sample_interval_values;
    
    +----+---------------+------------------+
    | C1 | YEAR_TO_MONTH | DAY_TO_SECOND    |
    |----+---------------+------------------|
    | 1  | +1-02         | +28 16:15:14.000 |
    | 2  | -3-02         | -54 16:15:14.123 |
    +----+---------------+------------------+
    

Einschränkungen für Intervall-Datentypen

Die folgenden Einschränkungen gelten für Intervall-Datentypen:

TIME

Snowflake unterstützt einen einzigen TIME-Datentyp zum Speichern von Zeiten im Format HH:MI:SS.

TIME unterstützt einen optionalen Genauigkeitsparameter für Sekundenbruchteile (z. B. TIME(3)). Die Zeitgenauigkeit kann zwischen 0 (Sekunden) und 9 (Nanosekunden) liegen. Die Standardgenauigkeit ist 9.

Alle TIME-Werte müssen zwischen 00:00:00 und 23:59:59.999999999 liegen. TIME speichert intern die lokale Zeit vor Ort, d. h. alle Operationen für TIME-Werte werden ohne jegliche Berücksichtigung von Zeitzonen durchgeführt.

TIMESTAMP_LTZ , TIMESTAMP_NTZ , TIMESTAMP_TZ

Snowflake unterstützt drei Zeitstempelvarianten:

TIMESTAMP_LTZ:

TIMESTAMP_LTZ speichert UTC-Werte intern mit der angegebenen Genauigkeit. Alle Operationen werden jedoch in der Zeitzone der aktuellen Sitzung ausgeführt, gesteuert vom Sitzungsparameter TIMEZONE.

Gleichbedeutend mit TIMESTAMP_LTZ:

  • TIMESTAMPLTZ

  • TIMESTAMP WITH LOCAL TIME ZONE

TIMESTAMP_NTZ:

TIMESTAMP_NTZ speichert intern die „Wanduhr“-Zeit mit einer bestimmten Genauigkeit. Alle Operationen werden ohne Berücksichtigung von Zeitzonen durchgeführt.

Wenn das Ausgabeformat eine Zeitzone enthält, wird der UTC-Indikator (Z) angezeigt.

TIMESTAMP_NTZ ist die Standardeinstellung für TIMESTAMP.

Gleichbedeutend mit TIMESTAMP_NTZ:

  • TIMESTAMPNTZ

  • TIMESTAMP WITHOUT TIME ZONE

  • DATETIME

TIMESTAMP_TZ:

TIMESTAMP_TZ speichert intern UTC-Werte zusammen mit einem zugehörigen Zeitzonenoffset. Wenn keine Zeitzone angegeben wird, wird der Zeitzonenversatz der Sitzung verwendet. Alle Operationen werden mit dem für jeweiligen Datensatz spezifischen Zeitzonenoffset durchgeführt.

Gleichbedeutend mit TIMESTAMP_TZ:

  • TIMESTAMPTZ

  • TIMESTAMP WITH TIME ZONE

TIMESTAMP_TZ-Werte werden anhand ihrer Zeiten in UTC verglichen. Der folgende Vergleich zwischen verschiedenen Zeiten in unterschiedlichen Zeitzonen gibt zum Beispiel TRUE zurück, da die beiden Werte äquivalente Zeiten in UTC haben.

SELECT '2024-01-01 00:00:00 +0000'::TIMESTAMP_TZ = '2024-01-01 01:00:00 +0100'::TIMESTAMP_TZ;

Achtung

Aktuell speichert TIMESTAMP_TZ zum Zeitpunkt der Erstellung für einen bestimmten Wert nur den Offset einer gegebenen Zeitzone, nicht die Zeitzone selbst. Dies ist besonders wichtig für die Sommerzeit, die von UTC nicht genutzt wird.

Wenn der Parameter TIMEZONE beispielsweise auf "America/Los_Angeles" gesetzt ist, wird beim Konvertieren eines Werts in TIMESTAMP_TZ im Januar eines gegebenen Jahres der Zeitzonenoffset -0800 gespeichert. Wenn der Wert später um sechs Monate erhöht wird, wird der Offset -0800 beibehalten, obwohl der Offset für Los Angeles im Juli -0700 lautet. Das liegt daran, dass nach Erstellung des Werts die Information zur aktuellen Zeitzone ("America/Los_Angeles") nicht mehr verfügbar ist. Das folgende Codebeispiel veranschaulicht dieses Verhalten:

SELECT '2024-01-01 12:00:00'::TIMESTAMP_TZ;
+-------------------------------------+
| '2024-01-01 12:00:00'::TIMESTAMP_TZ |
|-------------------------------------|
| 2024-01-01 12:00:00.000 -0800       |
+-------------------------------------+
SELECT DATEADD(MONTH, 6, '2024-01-01 12:00:00'::TIMESTAMP_TZ);
+--------------------------------------------------------+
| DATEADD(MONTH, 6, '2024-01-01 12:00:00'::TIMESTAMP_TZ) |
|--------------------------------------------------------|
| 2024-07-01 12:00:00.000 -0800                          |
+--------------------------------------------------------+

TIMESTAMP

TIMESTAMP in Snowflake ist ein benutzerdefinierter Alias, der einer der TIMESTAMP_*-Varianten zugeordnet ist. Bei allen Operationen, in denen TIMESTAMP verwendet wird, wird automatisch die zugeordnete TIMESTAMP_*-Variante verwendet. Der Datentyp TIMESTAMP wird niemals in Tabellen gespeichert.

Die mit TIMESTAMP verknüpfte TIMESTAMP_*-Variante wird durch den Sitzungsparameter TIMESTAMP_TYPE_MAPPING angegeben. Die Voreinstellung ist TIMESTAMP_NTZ.

Alle Zeitstempelvarianten und der TIMESTAMP-Alias unterstützen einen optionalen Präzisionsparameter für Sekundenbruchteile (z. B. TIMESTAMP(3)). Die Genauigkeit eines Zeitstempels kann zwischen 0 (Sekunden) und 9 (Nanosekunden) liegen. Die Standardgenauigkeit ist 9.

Beispiele für Zeitstempel

Diese Beispiele erstellen eine Tabelle mit verschiedenen Zeitstempeln.

Erstellen Sie zunächst eine Tabelle mit einer TIMESTAMP-Spalte (zugeordnet zu TIMESTAMP_NTZ):

ALTER SESSION SET TIMESTAMP_TYPE_MAPPING = TIMESTAMP_NTZ;

CREATE OR REPLACE TABLE ts_test(ts TIMESTAMP);

DESC TABLE ts_test;
+------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------+
| name | type             | kind   | null? | default | primary key | unique key | check | expression | comment | policy name | privacy domain |
|------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------|
| TS   | TIMESTAMP_NTZ(9) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        | NULL           |
+------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------+

Als Nächstes verwenden Sie explizit eine der TIMESTAMP Varianten (TIMESTAMP_LTZ):

CREATE OR REPLACE TABLE ts_test(ts TIMESTAMP_LTZ);

DESC TABLE ts_test;
+------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------+
| name | type             | kind   | null? | default | primary key | unique key | check | expression | comment | policy name | privacy domain |
|------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------|
| TS   | TIMESTAMP_LTZ(9) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    | NULL        | NULL           |
+------+------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+----------------+

Verwenden von TIMESTAMP_LTZ mit verschiedenen Zeitzonen:

CREATE OR REPLACE TABLE ts_test(ts TIMESTAMP_LTZ);

ALTER SESSION SET TIMEZONE = 'America/Los_Angeles';

INSERT INTO ts_test VALUES('2024-01-01 16:00:00');
INSERT INTO ts_test VALUES('2024-01-02 16:00:00 +00:00');

Diese Abfrage zeigt, dass es am 2. Januar 08:00 Uhr in Los Angeles ist (das ist 16:00 Uhr in UTC):

SELECT ts, HOUR(ts) FROM ts_test;
+-------------------------------+----------+
| TS                            | HOUR(TS) |
|-------------------------------+----------|
| 2024-01-01 16:00:00.000 -0800 |       16 |
| 2024-01-02 08:00:00.000 -0800 |        8 |
+-------------------------------+----------+

Beachten Sie außerdem, dass sich die Zeiten mit einer anderen Zeitzone ändern:

ALTER SESSION SET TIMEZONE = 'America/New_York';

SELECT ts, HOUR(ts) FROM ts_test;
+-------------------------------+----------+
| TS                            | HOUR(TS) |
|-------------------------------+----------|
| 2024-01-01 19:00:00.000 -0500 |       19 |
| 2024-01-02 11:00:00.000 -0500 |       11 |
+-------------------------------+----------+

Erstellen Sie eine Tabelle und verwenden Sie TIMESTAMP_NTZ:

CREATE OR REPLACE TABLE ts_test(ts TIMESTAMP_NTZ);

ALTER SESSION SET TIMEZONE = 'America/Los_Angeles';

INSERT INTO ts_test VALUES('2024-01-01 16:00:00');
INSERT INTO ts_test VALUES('2024-01-02 16:00:00 +00:00');

Beachten Sie, dass beide Zeiten aus verschiedenen Zeitzonen in dieselbe „Wanduhr“-Zeit umgerechnet werden:

SELECT ts, HOUR(ts) FROM ts_test;
+-------------------------+----------+
| TS                      | HOUR(TS) |
|-------------------------+----------|
| 2024-01-01 16:00:00.000 |       16 |
| 2024-01-02 16:00:00.000 |       16 |
+-------------------------+----------+

Beachten Sie außerdem, dass eine Änderung der Zeitzone der Sitzung keinen Einfluss auf die Ergebnisse hat:

ALTER SESSION SET TIMEZONE = 'America/New_York';

SELECT ts, HOUR(ts) FROM ts_test;
+-------------------------+----------+
| TS                      | HOUR(TS) |
|-------------------------+----------|
| 2024-01-01 16:00:00.000 |       16 |
| 2024-01-02 16:00:00.000 |       16 |
+-------------------------+----------+

Erstellen Sie eine Tabelle und verwenden Sie TIMESTAMP_TZ:

CREATE OR REPLACE TABLE ts_test(ts TIMESTAMP_TZ);

ALTER SESSION SET TIMEZONE = 'America/Los_Angeles';

INSERT INTO ts_test VALUES('2024-01-01 16:00:00');
INSERT INTO ts_test VALUES('2024-01-02 16:00:00 +00:00');

Beachten Sie, dass der Datensatz vom 1. Januar die Zeitzone der Sitzung übernommen hat und America/Los_Angeles in einen numerischen Zeitzonenversatz umgewandelt wurde:

SELECT ts, HOUR(ts) FROM ts_test;
+-------------------------------+----------+
| TS                            | HOUR(TS) |
|-------------------------------+----------|
| 2024-01-01 16:00:00.000 -0800 |       16 |
| 2024-01-02 16:00:00.000 +0000 |       16 |
+-------------------------------+----------+

Beachten Sie außerdem, dass eine Änderung der Zeitzone der Sitzung keinen Einfluss auf die Ergebnisse hat:

ALTER SESSION SET TIMEZONE = 'America/New_York';

SELECT ts, HOUR(ts) FROM ts_test;
+-------------------------------+----------+
| TS                            | HOUR(TS) |
|-------------------------------+----------|
| 2024-01-01 16:00:00.000 -0800 |       16 |
| 2024-01-02 16:00:00.000 +0000 |       16 |
+-------------------------------+----------+

Unterstützter Kalender

Snowflake verwendet für alle Datumsangaben und Zeitstempel den gregorianischen Kalender. Der gregorianische Kalender beginnt im Jahr 1582, berücksichtigt jedoch frühere Jahre. Dies ist wichtig, da Snowflake keine Datumsangaben vor 1582 (oder Berechnungen mit Datumsangaben vor 1582) anpasst, um mit dem julianischen Kalender übereinzustimmen. Das Formatelement UUUU unterstützt negative Jahreszahlen.

Datums- und Uhrzeitformate

Alle diese Datentypen akzeptieren die meisten nicht eindeutigen Datums-, Zeit- oder Datums- und Zeitformate. Weitere Informationen zu Unterstützte Formate für AUTO-Erkennung für die Formate, die Snowflake erkennt, wenn die automatische Erkennung von Formaten konfiguriert ist.

Sie können das Datums- und Uhrzeitformat auch manuell angeben. Bei der Angabe des Formats können Sie die in der folgenden Tabelle aufgeführten Elemente verwenden, bei denen die Groß-/Kleinschreibung nicht berücksichtigt wird:

Formatelement

Beschreibung

YYYY

Vierstellige Jahresangabe des Typs [1].

YY

Zweistellige Jahresangabe des Typs [1], gesteuert durch den Sitzungsparameter TWO_DIGIT_CENTURY_START. Wenn Sie zum Beispiel 1980 einstellen, werden die Werte von 79 und 80 als 2079 bzw. 1980 analysiert.

Y

Ein- oder zweistellige [2] Jahresangabe ohne führende Nullen, gesteuert durch den TWO_DIGIT_CENTURY_START-Sitzungsparameter. Wenn der Parameter beispielsweise auf 1990 gesetzt ist, werden die Werte 2005 und 1991 als 5 und entsprechend 91 serialisiert.

MM

Zweistellige Monatsangabe des Typs [1] (01 = Januar und so weiter).

MO

Ein- oder zweistellige [2] Monatsangabe ohne führende Nullen (1 = Januar und so weiter).

MON

Abgekürzter Monatsname [3].

MMMM

Vollständiger Monatsname [3].

DD

Zweistellige Angabe für Tag des Monats des Typs [1] (01 bis 31).

D

Ein- oder zweistellige [2] Angabe für Tag des Monats ohne führende Nullen (1 bis 31).

DY

Abgekürzter Wochentag.

HH24

Zweistellige Angabe [1] für Stunde (00 bis 23). Sie dürfen nicht AM / PM oder A / P angeben.

HH12

Zweistellige Angabe [1] für Stunde (01 bis 12). Sie können AM / PM oder A / P angeben.

H24

Ein- oder zweistellige Angabe [2] für Stunde ohne führende Nullen (0 bis 23). Sie dürfen nicht AM / PM oder A / P angeben.

H12

Ein- oder zweistellige Angabe [2] für Stunde ohne führende Nullen (1 bis 12). Sie können AM / PM oder A / P angeben.

AM, PM

Ante Meridiem (AM) / Post Meridiem (PM). Verwenden Sie diese Angabe nur mit HH12 und code:H12 (nicht mit HH24 oder H24).

P

Ante Meridiem (A) / Post Meridiem (P). Verwenden Sie diese Angabe nur mit HH12 und code:H12 (nicht mit HH24 oder H24).

HH

Synonym für HH24.

H

Synonym für H24.

MI

Zweistellige Minutenangabe des Typs [1] (00 bis 59).

ME

Ein- oder zweistellige Angabe [2] für Minute ohne führende Nullen (0 bis 59).

SS

Zweistellige Sekundenangabe des Typs [1] (00 bis 59).

S

Ein- oder zweistellige Angabe :sup:` [2]` für Sekunde ohne führende Nullen (0 bis 59).

FF[0-9]

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

TZH:TZM, TZHTZM, TZH

Zweistellige Zeitzonenstunde und -minute des Typs [1], Offset von UTC. Kann +/- als Vorzeichen erhalten.

UUUU

Vierstellige Jahreszahl im ISO-Format, die für Jahre v. u. Z. negativ ist.

[1] Die Anzahl der Ziffern beschreibt die Ausgabe, die beim Serialisieren von Werten in Text erzeugt wird. Beim Parsen von Text akzeptiert Snowflake Werte bis zur angegebenen Anzahl von Ziffern. Zum Beispiel kann die Nummer für einen Tag aus ein oder zwei Ziffern bestehen.

[2] Die Anzahl der Ziffern beschreibt die Ausgabe, die beim Serialisieren von Werten in Text erzeugt wird. Analysieren wird nicht unterstützt. Wenn das Analysieren erforderlich ist, verwenden Sie ein gleichwertiges Format, das führende Nullen enthält. Diese Formatelemente werden in BCR Bundle 2026_03 aktiviert.

[3] Für das MON-Formatelement ist die Ausgabe, die bei der Serialisierung von Werten in Text erzeugt wird, der abgekürzte Monatsname. Für das MMMM-Formatelement ist die Ausgabe, die bei der Serialisierung von Werten in Text erzeugt wird, der vollständige Monatsname. Beim Analysieren von Text akzeptiert Snowflake die dreistellige Abkürzung oder den vollständigen Monatsnamen für MON und MMMM. Beispielsweise werden „Januar“ oder „Jan“, „Februar“ oder „Feb“ usw. beim Analysieren von Text akzeptiert.

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. Snowflake empfiehlt, stets Literalzeichen in doppelte Anführungszeichen zu setzen (z. B. "T", "EST", "Z"), um sicherzustellen, dass sie als Literale behandelt 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.

Beispiele für die Verwendung von Datums- und Uhrzeitformaten

Im folgenden Beispiel wird FF verwendet, um anzugeben, dass die Ausgabe im Feld „Sekundenbruchteil“ 9 Ziffern hat:

CREATE OR REPLACE TABLE timestamp_demo_table(
  tstmp TIMESTAMP,
  tstmp_tz TIMESTAMP_TZ,
  tstmp_ntz TIMESTAMP_NTZ,
  tstmp_ltz TIMESTAMP_LTZ);
INSERT INTO timestamp_demo_table (tstmp, tstmp_tz, tstmp_ntz, tstmp_ltz) VALUES (
  '2024-03-12 01:02:03.123456789',
  '2024-03-12 01:02:03.123456789',
  '2024-03-12 01:02:03.123456789',
  '2024-03-12 01:02:03.123456789');
ALTER SESSION SET TIMESTAMP_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
ALTER SESSION SET TIMESTAMP_TZ_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
ALTER SESSION SET TIMESTAMP_NTZ_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
ALTER SESSION SET TIMESTAMP_LTZ_OUTPUT_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF';
SELECT tstmp, tstmp_tz, tstmp_ntz, tstmp_ltz
  FROM timestamp_demo_table;
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
| TSTMP                         | TSTMP_TZ                      | TSTMP_NTZ                     | TSTMP_LTZ                     |
|-------------------------------+-------------------------------+-------------------------------+-------------------------------|
| 2024-03-12 01:02:03.123456789 | 2024-03-12 01:02:03.123456789 | 2024-03-12 01:02:03.123456789 | 2024-03-12 01:02:03.123456789 |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+

Datums- und Uhrzeitkonstanten

Konstanten (auch bekannt als Literale) sind feste Datenwerte. Snowflake unterstützt die Angabe von festen Datums-, Zeit- oder Zeitstempelwerten unter Verwendung von Zeichenfolgenkonstanten. Zeichenfolgenkonstanten müssen immer zwischen Trennzeichen eingeschlossen sein. Snowflake unterstützt die Nutzung einfacher Anführungszeichen zum Trennen von Zeichenfolgenkonstanten.

Beispiel:

DATE '2024-08-14'
TIME '10:03:56'
TIMESTAMP '2024-08-15 10:59:43'

Die Zeichenfolge wird als DATE-, TIME- oder TIMESTAMP-Wert analysiert, basierend auf dem Eingabeformat für den Datentyp, wie durch die folgenden Parameter festgelegt:

DATE:

DATE_INPUT_FORMAT

TIME:

TIME_INPUT_FORMAT

TIMESTAMP:

TIMESTAMP_INPUT_FORMAT

Fügen Sie beispielsweise ein bestimmtes Datum in eine Spalte einer Tabelle ein:

CREATE TABLE t1 (d1 DATE);

INSERT INTO t1 (d1) VALUES (DATE '2024-08-15');

Intervallkonstanten

Sie können Intervallkonstanten verwenden, um einen Zeitraum zu bzw. von einem Datum, einer Uhrzeit oder einem Zeitstempel zu addieren oder abzuziehen. Intervallkonstanten werden mit dem Schlüsselwort INTERVAL implementiert, das die folgende Syntax aufweist:

{ + | - } INTERVAL '<integer> [ <date_time_part> ] [ , <integer> [ <date_time_part> ] ... ]'

Wie bei allen Zeichenfolgenkonstanten erfordert Snowflake einfache Anführungszeichen, um Intervallkonstanten zu trennen.

Bemerkung

Intervallkonstanten unterstützen Datums- und Zeitberechnungen, aber nicht die Intervallspeicherung als Spaltentyp. Um Intervallwerte in einer Spalte zu speichern, können Sie Intervall-Datentypen verwenden.

Das Schlüsselwort INTERVAL unterstützt eine oder mehrere Ganzzahlen und optional eine oder mehrere Datums- oder Uhrzeitkomponenten. Beispiel:

  • INTERVAL '1 year' steht für ein Jahr.

  • INTERVAL '4 years, 5 months, 3 hours' entspricht vier Jahren, fünf Monaten und drei Stunden.

Wenn keine Datums- oder Zeitkomponente angegeben ist, stellt das Intervall Sekunden dar (so entspricht INTERVAL '2' z. B. INTERVAL '2 seconds'). Beachten Sie, dass sich dies von der Standardzeiteinheit zur Durchführung der Datumsberechnung unterscheidet. Weitere Details dazu finden Sie unter Einfache Arithmetik für Datumsangaben.

Die Liste der unterstützten Datums- und Uhrzeitkomponenten finden Sie unter Unterstützte Datums- und Uhrzeitkomponenten bei Intervallen.

Bemerkung

  • Die Reihenfolge der Intervallinkremente ist wichtig. Die Inkremente werden in der angegebenen Reihenfolge addiert oder subtrahiert. Beispiel:

    • INTERVAL '1 year, 1 day' addiert oder subtrahiert zuerst ein Jahr und dann einen Tag.

    • INTERVAL '1 day, 1 year' addiert oder subtrahiert zuerst einen Tag und dann ein Jahr.

    Unterschiede in der Reihenfolge können sich auf Berechnungen auswirken, die durch Kalenderereignisse wie Schaltjahre beeinflusst werden:

    SELECT TO_DATE ('2019-02-28') + INTERVAL '1 day, 1 year';
    
    +---------------------------------------------------+
    | TO_DATE ('2019-02-28') + INTERVAL '1 DAY, 1 YEAR' |
    |---------------------------------------------------|
    | 2020-03-01                                        |
    +---------------------------------------------------+
    
    SELECT TO_DATE ('2019-02-28') + INTERVAL '1 year, 1 day';
    
    +---------------------------------------------------+
    | TO_DATE ('2019-02-28') + INTERVAL '1 YEAR, 1 DAY' |
    |---------------------------------------------------|
    | 2020-02-29                                        |
    +---------------------------------------------------+
    
  • INTERVAL ist kein Datentyp ist (d. h. Sie können keine Tabellenspalte mit dem Datentyp INTERVALdefinieren). Intervalle können nur für Datums-, Uhrzeit- und Zeitstempelberechnungen verwendet werden.

  • Sie können kein Intervall mit einer SQL-Variable verwenden. Die folgende Abfrage gibt zum Beispiel einen Fehler zurück:

    SET v1 = '1 year';
    
    SELECT TO_DATE('2023-04-15') + INTERVAL $v1;
    

Unterstützte Datums- und Uhrzeitkomponenten bei Intervallen

Das Schlüsselwort INTERVAL unterstützt die folgenden Datums- und Uhrzeitkomponenten als Argumente (ohne Berücksichtigung der Groß- und Kleinschreibung):

Datums- oder Zeitkomponente

Abkürzungen/Varianten

year

y, yy, yyy, yyyy, yr, years, yrs

quarter

q, qtr, qtrs, quarters

month

mm, mon, mons, months

week

w, wk, weekofyear, woy, wy, weeks

day

d, dd, days, dayofmonth

hour

h, hh, hr, hours, hrs

minute

m, mi, min, minutes, mins

second

s, sec, seconds, secs

millisecond

ms, msec, milliseconds

microsecond

us, usec, microseconds

nanosecond

ns, nsec, nanosec, nsecond, nanoseconds, nanosecs, nseconds

Beispiele für Intervalle

Fügt zu einem bestimmten Datum ein Intervall von einem Jahr hinzu:

SELECT TO_DATE('2023-04-15') + INTERVAL '1 year';
+-------------------------------------------+
| TO_DATE('2023-04-15') + INTERVAL '1 YEAR' |
|-------------------------------------------|
| 2024-04-15                                |
+-------------------------------------------+

Fügen Sie ein Intervall von 3 Stunden und 18 Minuten zu einer bestimmten Zeit hinzu:

SELECT TO_TIME('04:15:29') + INTERVAL '3 hours, 18 minutes';
+------------------------------------------------------+
| TO_TIME('04:15:29') + INTERVAL '3 HOURS, 18 MINUTES' |
|------------------------------------------------------|
| 07:33:29                                             |
+------------------------------------------------------+

Fügt der Ausgabe der Funktion CURRENT_TIMESTAMP ein komplexes Intervall hinzu:

SELECT CURRENT_TIMESTAMP + INTERVAL
    '1 year, 3 quarters, 4 months, 5 weeks, 6 days, 7 minutes, 8 seconds,
    1000 milliseconds, 4000000 microseconds, 5000000001 nanoseconds'
  AS complex_interval1;

Es folgt eine Beispielausgabe. Die Ausgabe ist anders, wenn der aktuelle Zeitstempel anders ist.

+-------------------------------+
| COMPLEX_INTERVAL1             |
|-------------------------------|
| 2026-11-07 18:07:19.875000001 |
+-------------------------------+

Fügt ein komplexes Intervall mit verkürzter Notation für Datums-/Zeitkomponenten zu einem bestimmten Datum hinzu:

SELECT TO_DATE('2025-01-17') + INTERVAL
    '1 y, 3 q, 4 mm, 5 w, 6 d, 7 h, 9 m, 8 s,
    1000 ms, 445343232 us, 898498273498 ns'
  AS complex_interval2;
+-------------------------------+
| COMPLEX_INTERVAL2             |
|-------------------------------|
| 2027-03-30 07:31:32.841505498 |
+-------------------------------+

Fragt eine Tabelle mit Mitarbeiterinformationen ab und gibt die Namen von Mitarbeitern zurück, die in den letzten zwei Jahren und drei Monaten eingestellt wurden:

SELECT name, hire_date
  FROM employees
  WHERE hire_date > CURRENT_DATE - INTERVAL '2 y, 3 month';

Filtern Sie eine Spalte TIMESTAMP mit dem Namen ts aus einer Tabelle mit dem Namen t1 und addieren Sie vier Sekunden zu jedem Rückgabewert:

SELECT ts + INTERVAL '4 seconds'
  FROM t1
  WHERE ts > TO_TIMESTAMP('2024-04-05 01:02:03');

Einfache Arithmetik für Datumsangaben

Zusätzlich zur Verwendung von Intervallkonstanten zum Addieren und Subtrahieren von Datumsangaben, Zeiten und Zeitstempeln können Sie auch Tage zu und von DATE Werten addieren und subtrahieren, und zwar in der Form von { + | - } integer, wobei integer die Anzahl der zu addierenden oder subtrahierenden Tage angibt.

Bemerkung

TIME- und TIMESTAMP-Werte unterstützen noch keine einfache Arithmetik.

Beispiele für Datumsberechnungen

Fügen Sie einen Tag zu einem bestimmten Datum hinzu:

SELECT TO_DATE('2024-04-15') + 1;
+---------------------------+
| TO_DATE('2024-04-15') + 1 |
|---------------------------|
| 2024-04-16                |
+---------------------------+

Ziehen Sie vier Tage von einem bestimmten Datum ab:

SELECT TO_DATE('2024-04-15') - 4;
+---------------------------+
| TO_DATE('2024-04-15') - 4 |
|---------------------------|
| 2024-04-11                |
+---------------------------+

Fragt eine Tabelle namens employees ab und gibt die Namen von Personen zurück, die das Unternehmen verlassen haben, aber mehr als 365 Tage im Unternehmen beschäftigt waren:

SELECT name
  FROM employees
  WHERE end_date > start_date + 365;