Categorias:

Funções de data e hora

DATE_TRUNC

Trunca DATE, TIME ou TIMESTAMP com a precisão especificada.

Note que o truncamento não é o mesmo que extração. Por exemplo:

  • O truncamento de um carimbo de data/hora ao trimestre retorna o carimbo de data/hora correspondente à meia-noite do primeiro dia do trimestre para o carimbo de data/hora de entrada.

  • A extração da parte da data do trimestre de um carimbo de data/hora retorna o número do trimestre do ano no carimbo de data/hora.

Alternativas:

TRUNC

Consulte também:

DATE_PART , EXTRACT

Sintaxe

DATE_TRUNC( <date_or_time_part>, <date_or_time_expr> )
Copy

Retornos

O valor retornado é do mesmo tipo que o valor de entrada.

Por exemplo, se o valor de entrada for um TIMESTAMP, então o valor retornado será um TIMESTAMP.

Notas de uso

Exemplos

Truncar uma data (de um carimbo de data/hora) ao ano, mês e dia:

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       |
+------------+-------------------+--------------------+------------------+
Copy

Truncar um TIMESTAMP à hora, minuto e segundo. Observe que em todos os casos, o valor retornado é um TIMESTAMP, mas com zeros para as partes (por exemplo, segundos fracionários) que foram truncadas:

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 |
+-------------------------+-------------------------+-------------------------+-------------------------+
Copy

Truncar um tempo ao minuto:

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            |
+----------+---------------------+
Copy

Truncamento de contraste com extração:

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 |
+-------------------------+-----------+
Copy