Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função TRUNC(data) no Oracle


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: