Kategorien:

Datums- und Uhrzeitfunktionen

DATE_TRUNC

Schneidet DATE-, TIME- oder TIMESTAMP-Werte mit der angegebenen Genauigkeit ab.

Beachten Sie, dass Kürzen nicht identisch ist mit Extrahieren. Beispiel:

  • Wenn Sie einen Zeitstempel auf das Quartal kürzen, wird der Zeitstempel zurückgegeben, der der Mitternacht des ersten Tags des Quartals für den Eingabezeitstempel entspricht.

  • Durch Extrahieren der Quartalsdatumskomponente aus einem Zeitstempel wird die Quartalsnummer des Jahres im Zeitstempel zurückgegeben.

Alternativen:

TRUNC

Siehe auch:

DATE_PART , EXTRACT

Syntax

DATE_TRUNC( <date_or_time_part>, <date_or_time_expr> )

Rückgabewerte

Der zurückgegebene Wert ist vom selben Typ wie der Eingabewert.

Wenn der Eingabewert beispielsweise TIMESTAMP ist, ist der zurückgegebene Wert TIMESTAMP.

Nutzungshinweise

  • Datum_oder_Zeit_Teil muss einer der unter Unterstützte Datums- und Zeitabschnitte aufgeführten Werte sein.

    Wenn Datum_oder_Zeit_Teil den Wert week (oder eine seiner Varianten) hat, wird die Ausgabe vom Sitzungsparameter WEEK_START gesteuert. Weitere Details einschließlich Beispielen finden Sie unter Kalenderwochen und Wochentage.

  • Datum_oder_Zeit_Ausdruck kann ein Datum, eine Uhrzeit oder ein Zeitstempel sein.

Beispiele

Kürzen eines Datums (aus einem Zeitstempel) auf Jahr, Monat und Tag:

SELECT TO_DATE('2015-05-08T23:39:20.123-07:00') AS "DATE1",
       DATE_TRUNC('YEAR', "DATE1") AS "TRUNCATED TO YEAR",
       DATE_TRUNC('MONTH', "DATE1") AS "TRUNCATED TO MONTH",
       DATE_TRUNC('DAY', "DATE1") AS "TRUNCATED TO DAY";
+------------+-------------------+--------------------+------------------+
| DATE1      | TRUNCATED TO YEAR | TRUNCATED TO MONTH | TRUNCATED TO DAY |
|------------+-------------------+--------------------+------------------|
| 2015-05-08 | 2015-01-01        | 2015-05-01         | 2015-05-08       |
+------------+-------------------+--------------------+------------------+

Kürzen eines TIMESTAMP auf Stunde, Minute und Sekunde: Beachten Sie, dass der zurückgegebene Wert in allen Fällen ein TIMESTAMP ist, jedoch mit Nullen für die Teile (z. B. Sekundenbruchteile), die abgeschnitten wurden:

SELECT TO_TIMESTAMP('2015-05-08T23:39:20.123-07:00') AS "TIMESTAMP1",
       DATE_TRUNC('HOUR', "TIMESTAMP1") AS "TRUNCATED TO HOUR",
       DATE_TRUNC('MINUTE', "TIMESTAMP1") AS "TRUNCATED TO MINUTE",
       DATE_TRUNC('SECOND', "TIMESTAMP1") AS "TRUNCATED TO SECOND";
+-------------------------+-------------------------+-------------------------+-------------------------+
| TIMESTAMP1              | TRUNCATED TO HOUR       | TRUNCATED TO MINUTE     | TRUNCATED TO SECOND     |
|-------------------------+-------------------------+-------------------------+-------------------------|
| 2015-05-08 23:39:20.123 | 2015-05-08 23:00:00.000 | 2015-05-08 23:39:00.000 | 2015-05-08 23:39:20.000 |
+-------------------------+-------------------------+-------------------------+-------------------------+

Kürzen einer Zeit auf die Minute:

SELECT TO_TIME('23:39:20.123') AS "TIME1",
       DATE_TRUNC('MINUTE', "TIME1") AS "TRUNCATED TO MINUTE";
+----------+---------------------+
| TIME1    | TRUNCATED TO MINUTE |
|----------+---------------------|
| 23:39:20 | 23:39:00            |
+----------+---------------------+

Vergleichen von Kürzung mit Extraktion:

SELECT DATE_TRUNC('QUARTER', '2019-08-01 12:34:56.789'::TIMESTAMP_NTZ) AS "TRUNCATED",
       EXTRACT(   'QUARTER', '2019-08-01 12:34:56.789'::TIMESTAMP_NTZ) AS "EXTRACTED";
+-------------------------+-----------+
| TRUNCATED               | EXTRACTED |
|-------------------------+-----------|
| 2019-07-01 00:00:00.000 |         3 |
+-------------------------+-----------+