No Oracle Database, o
TRUNC(date)
A função retorna o valor de data fornecido com a parte de hora do dia truncada para a unidade fornecida no modelo de formato especificado. Oracle também tem um
TRUNC(number)
sintaxe, que é usada em números. Este artigo é apenas sobre o TRUNC(date)
sintaxe, que é usada em datas. Sintaxe
A sintaxe fica assim:
TRUNC(date [, fmt ])
Onde
date
é a data a ser truncada e fmt
é um modelo de formato opcional que especifica uma unidade para a qual truncar o valor. O modelo de formato pode ser qualquer um dos modelos de formato suportados para o TRUNC(date)
e ROUND(date)
funções. A função opera de acordo com as regras do calendário gregoriano (não é sensível ao valor do
NLS_CALENDAR
parâmetro). Exemplo
Aqui está um exemplo:
SELECT TRUNC(DATE '2035-08-22', 'MONTH')
FROM DUAL;
Resultado:
01-AUG-35
Aqui estão mais alguns:
SELECT
TRUNC(DATE '2035-08-22', 'D') AS "D",
TRUNC(DATE '2035-08-22', 'DD') AS "DD",
TRUNC(DATE '2035-08-22', 'MONTH') AS "Month",
TRUNC(DATE '2035-08-22', 'YEAR') AS "Year",
TRUNC(DATE '2035-08-22', 'CC') AS "CC"
FROM DUAL;
Resultado:
D DD Month Year CC ____________ ____________ ____________ ____________ ____________ 19-AUG-35 22-AUG-35 01-AUG-35 01-JAN-35 01-JAN-01
O resultado é formatado de acordo com o formato de data da sessão atual. Consulte Como verificar o formato de data da sessão atual e Como alterar o formato de data da sessão atual para obter mais informações sobre isso.
Unidade de data padrão
A unidade de data padrão é
DD
:SELECT
TRUNC(DATE '2035-08-22') AS "Default",
TRUNC(DATE '2035-08-22', 'DD') AS "DD"
FROM DUAL;
Resultado:
Default DD ____________ ____________ 22-AUG-35 22-AUG-35
Comparado com ROUND()
O
TRUNC(date)
função é diferente da ROUND(date)
função. O ROUND()
função arredonda a data para cima em alguns casos e para baixo em outros. O TRUNC()
A função, por outro lado, simplesmente trunca a data para a unidade especificada sem arredondamento. Aqui está uma comparação para demonstrar essa diferença:
SELECT
TRUNC(DATE '2030-12-31', 'MONTH') AS "Trunc",
ROUND(DATE '2030-12-31', 'MONTH') AS "Round"
FROM DUAL;
Resultado:
Trunc Round ____________ ____________ 01-DEC-30 01-JAN-31
Valores nulos
Se um dos argumentos for
null
, o resultado é null
:SET NULL 'null';
SELECT
TRUNC(null, 'D'),
TRUNC(date'2020-12-30', null)
FROM DUAL;
Resultado:
TRUNC(NULL,'D') TRUNC(DATE'2020-12-30',NULL) __________________ _______________________________ null null
Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que um valor nulo ocorre como resultado de um SQL
SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null
deve ser devolvido. Contagem de argumentos inválida
Chamando
TRUNC()
sem um argumento resulta em um erro:SELECT TRUNC()
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT TRUNC() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
E chamá-lo com muitos argumentos resulta em um erro:
SELECT TRUNC(1, 2, 3)
FROM DUAL;
Resultado:
Error starting at line : 1 in command - SELECT TRUNC(1, 2, 3) FROM DUAL Error at Command Line : 1 Column : 20 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: