Categorias:

Funções de data e hora

DATE_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 TRUNCATE, 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.

Alternativas:

TRUNCATE, TRUNC

Consulte também:

DATE_PART , EXTRACT

Sintaxe

DATE_TRUNC( <date_or_time_part>, <date_or_time_expr> ) 
Copy

Argumentos

date_or_time_part

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

date_or_time_expr

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

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.

  • Para valores TIME, você não pode especificar um date_or_time_part que esteja fora do escopo do tipo TIME. Por exemplo, você pode truncar um valor TIMESTAMP em day, week, year, e assim por diante, porque o tipo TIMESTAMP codifica data/hora com a precisão necessária. No entanto, tentar truncar um valor TIME em day, week, year e assim por diante causa um erro.

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

Truncar um tempo ao minuto:

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

Truncar um TIMESTAMP à hora, minuto e segundo:

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

Contraste a função DATE_TRUNC com a função 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 | +-------------------------+-----------+