Kategorien:

Datums- und Uhrzeitfunktionen

DATE_TRUNC

Schneidet DATE-, TIME- oder TIMESTAMP-Werte mit der angegebenen Genauigkeit ab. Wenn Sie einen Zeitstempel zum Beispiel auf das Quartal kürzen, wird der Zeitstempel zurückgegeben, der Mitternacht des ersten Tages im Quartal des ursprünglichen Zeitstempels entspricht.

Diese Funktion bietet eine alternative Syntax für TRUNC, indem die beiden Argumente umgekehrt werden.

Kürzen ist nicht identisch mit Extrahieren. Beispiel:

  • Wenn Sie einen Zeitstempel mit dieser Funktion 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 mit EXTRACT 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> )
Copy

Argumente

date_or_time_part

Dieses Argument muss einer der unter Unterstützte Datums- und Uhrzeitkomponenten aufgeführten Werte sein.

date_or_time_expr

Dieses Argument muss ein Datum, eine Uhrzeit oder einen Zeitstempel ergeben.

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

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

Beispiele

Die DATE_TRUNC-Funktionsbeispiele verwenden die Daten in der folgenden Tabelle:

CREATE OR REPLACE TABLE test_date_trunc (
 mydate DATE,
 mytime TIME,
 mytimestamp TIMESTAMP);

INSERT INTO test_date_trunc VALUES (
  '2024-05-09',
  '08:50:48',
  '2024-05-09 08:50:57.891 -0700');

SELECT * FROM test_date_trunc;
Copy
+------------+----------+-------------------------+
| MYDATE     | MYTIME   | MYTIMESTAMP             |
|------------+----------+-------------------------|
| 2024-05-09 | 08:50:48 | 2024-05-09 08:50:57.891 |
+------------+----------+-------------------------+

Die folgenden Beispiele zeigen, wie das Datum abgeschnitten wird. In allen Fällen ist der zurückgegebene Wert vom gleichen Datentyp wie der Eingabewert, jedoch mit Nullen für die Teile, wie z. B. Sekundenbruchteile, die abgeschnitten wurden:

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

SELECT mydate AS "DATE",
       DATE_TRUNC('year', mydate) AS "TRUNCATED TO YEAR",
       DATE_TRUNC('month', mydate) AS "TRUNCATED TO MONTH",
       DATE_TRUNC('week', mydate) AS "TRUNCATED TO WEEK",
       DATE_TRUNC('day', mydate) AS "TRUNCATED TO DAY"
  FROM test_date_trunc;
Copy
+------------+-------------------+--------------------+-------------------+------------------+
| DATE       | TRUNCATED TO YEAR | TRUNCATED TO MONTH | TRUNCATED TO WEEK | TRUNCATED TO DAY |
|------------+-------------------+--------------------+-------------------+------------------|
| 2024-05-09 | 2024-01-01        | 2024-05-01         | 2024-05-06        | 2024-05-09       |
+------------+-------------------+--------------------+-------------------+------------------+

Kürzen eines Zeitwerts auf die Minute:

SELECT mytime AS "TIME",
       DATE_TRUNC('minute', mytime) AS "TRUNCATED TO MINUTE"
  FROM test_date_trunc;
Copy
+----------+---------------------+
| TIME     | TRUNCATED TO MINUTE |
|----------+---------------------|
| 08:50:48 | 08:50:00            |
+----------+---------------------+

Kürzen eines TIMESTAMP-Werts auf Stunde, Minute und Sekunde:

SELECT mytimestamp AS "TIMESTAMP",
       DATE_TRUNC('hour', mytimestamp) AS "TRUNCATED TO HOUR",
       DATE_TRUNC('minute', mytimestamp) AS "TRUNCATED TO MINUTE",
       DATE_TRUNC('second', mytimestamp) AS "TRUNCATED TO SECOND"
  FROM test_date_trunc;
Copy
+-------------------------+-------------------------+-------------------------+-------------------------+
| TIMESTAMP               | TRUNCATED TO HOUR       | TRUNCATED TO MINUTE     | TRUNCATED TO SECOND     |
|-------------------------+-------------------------+-------------------------+-------------------------|
| 2024-05-09 08:50:57.891 | 2024-05-09 08:00:00.000 | 2024-05-09 08:50:00.000 | 2024-05-09 08:50:57.000 |
+-------------------------+-------------------------+-------------------------+-------------------------+

Gegenüberstellen der Funktion DATE_TRUNC und der Funktion EXTRACT:

SELECT DATE_TRUNC('quarter', mytimestamp) AS "TRUNCATED",
       EXTRACT('quarter', mytimestamp) AS "EXTRACTED"
  FROM test_date_trunc;
Copy
+-------------------------+-----------+
| TRUNCATED               | EXTRACTED |
|-------------------------+-----------|
| 2024-04-01 00:00:00.000 |         2 |
+-------------------------+-----------+