Categorias:

Funções de data e hora

TRUNC

Trunca um valor DATE, TIME ou TIMESTAMP com a precisão especificada. Por exemplo, truncar o carimbo de data/hora até o trimestre retorna o carimbo de data/hora correspondente à meia-noite do primeiro dia do trimestre original do carimbo de data/hora.

Esta função fornece uma sintaxe alternativa para DATE_TRUNC invertendo os dois argumentos.

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

  • O truncamento de um carimbo de data/hora ao trimestre usando esta função 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 usando a função EXTRACT retorna o número do trimestre do ano no carimbo de data/hora.

Nota

A função está sobrecarregada. Ela também pode ser usada como uma função numérica para arredondar expressões numéricas para menos.

Alternativas:

DATE_TRUNC

Consulte também:

DATE_PART , EXTRACT

Sintaxe

TRUNC( <date_or_time_expr>, <date_or_time_part> )
Copy

Argumentos

date_or_time_expr

Este argumento deve avaliar como uma data hora, ou carimbo de data/hora.

date_or_time_part

Este argumento ser um dos valores listados em Partes de data e hora com suporte.

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

  • Quando date_or_time_part é week (ou qualquer uma de suas variações), a saída é controlada pelo parâmetro de sessão WEEK_START. Para obter mais detalhes, incluindo exemplos, consulte Semanas do ano e dias úteis.

Exemplos

Os exemplos da função DATE_TRUNC usam os dados da tabela a seguir:

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

Os exemplos a seguir mostram truncamento de data. Em todos os casos, o valor retornado é do mesmo tipo de dados que o valor de entrada, mas com zeros para as partes, como segundos fracionários, que foram truncadas:

Truncar uma data ao ano, mês e dia:

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

Truncar um tempo ao minuto:

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

Truncar um TIMESTAMP à hora, minuto e segundo:

SELECT mytimestamp AS "TIMESTAMP",
       TRUNC(mytimestamp, 'hour') AS "TRUNCATED TO HOUR",
       TRUNC(mytimestamp, 'minute') AS "TRUNCATED TO MINUTE",
       TRUNC(mytimestamp, 'second') 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 |
+-------------------------+-------------------------+-------------------------+-------------------------+

Contraste a função DATE_TRUNC com a função EXTRACT:

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