- Kategorien:
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.
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¶
date_or_time_part
muss einer der in Unterstützte Datums- und Uhrzeitkomponenten aufgeführten Werte sein.Wenn
date_or_time_part
den Wertweek
(oder eine seiner Varianten) hat, wird die Ausgabe vom Sitzungsparameter WEEK_START gesteuert. Weitere Details einschließlich Beispiele finden Sie unter Kalenderwochen und Wochentage.date_or_time_expr
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
-Werts auf Stunde, Minute und Sekunde: Beachten Sie, dass der zurückgegebene Wert in allen Fällen ein TIMESTAMP
-Wert ist, jedoch mit Nullen für die Teile, die abgeschnitten wurden (z. B. für Sekundenbruchteile):
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 eines Zeitwerts 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 | +-------------------------+-----------+