- Categorias:
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.
Sintaxe¶
DATE_TRUNC( <date_or_time_part>, <date_or_time_expr> )
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¶
date_or_time_part
deve ser um dos valores listados em Partes de data e hora com suporte.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 de calendário e dias úteis.date_or_time_expr
pode ser uma data, hora ou carimbo de data/hora.
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 | +------------+-------------------+--------------------+------------------+
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 | +-------------------------+-------------------------+-------------------------+-------------------------+
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 | +----------+---------------------+
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 | +-------------------------+-----------+