- Categorias:
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:
- Consulte também:
Sintaxe¶
TRUNC( <date_or_time_expr>, <date_or_time_part> )
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;
+------------+----------+-------------------------+
| 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;
+------------+-------------------+--------------------+------------------+
| 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;
+----------+---------------------+
| 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;
+-------------------------+-------------------------+-------------------------+-------------------------+
| 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;
+-------------------------+-----------+
| TRUNCATED | EXTRACTED |
|-------------------------+-----------|
| 2024-04-01 00:00:00.000 | 2 |
+-------------------------+-----------+