- Categorias:
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:
- Consulte também:
Sintaxe¶
DATE_TRUNC( <date_or_time_part>, <date_or_time_expr> ) Argumentos¶
date_or_time_partEste argumento ser um dos valores listados em Partes de data e hora com suporte.
date_or_time_exprEste 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_partque esteja fora do escopo do tipo TIME. Por exemplo, você pode truncar um valor TIMESTAMP emday,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 emday,week,yeare 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; +------------+----------+-------------------------+ | 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; +------------+-------------------+--------------------+-------------------+------------------+ | 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; +----------+---------------------+ | 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; +-------------------------+-------------------------+-------------------------+-------------------------+ | 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; +-------------------------+-----------+ | TRUNCATED | EXTRACTED | |-------------------------+-----------| | 2024-04-01 00:00:00.000 | 2 | +-------------------------+-----------+