- 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¶
Datum_oder_Zeit_Teil
muss einer der unter Unterstützte Datums- und Zeitabschnitte aufgeführten Werte sein.Wenn
Datum_oder_Zeit_Teil
den Wertweek
(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 | +-------------------------+-----------+