Este artigo fornece uma solução para um problema que você pode encontrar ocasionalmente ao usar o
DATEDIFF()
função no SQL Server. Se você encontrar o seguinte erro:
A função dateiff resultou em um estouro. O número de partes de data que separam duas instâncias de data/hora é muito grande. Tente usar datediff com um datepart menos preciso.
É porque o valor de retorno é muito grande. O
DATEDIFF()
função retorna seu resultado como um int tipo de dados. O motivo pelo qual você recebeu esta mensagem é que o valor de retorno é muito grande para o int tipo de dados. Felizmente, há uma maneira fácil de corrigir isso. A maneira mais rápida e fácil de corrigir esse problema é alternar para o
DATEDIFF_BIG()
função. Esta função funciona exatamente como DATEDIFF()
, exceto que seu tipo de dados de retorno é um bigint assinado . Em outras palavras, ele pode lidar com números realmente grandes. Exemplo
Vamos ver se
DATEDIFF()
pode nos dizer quantos milissegundos existem em mil anos:SELECT DATEDIFF( millisecond, SYSDATETIME(), DATEADD(year, 1000, SYSDATETIME()) ) AS 'Milliseconds in 1000 years';
Resultado:
The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.
Talvez não. Parece que há muitos milissegundos para caber em um int .
Hora das grandes armas.
DATEDIFF_BIG()
, faça suas coisas... SELECT DATEDIFF_BIG( millisecond, SYSDATETIME(), DATEADD(year, 1000, SYSDATETIME()) ) AS 'Milliseconds in 1000 years';
Resultado:
Milliseconds in 1000 years -------------------------- 31556908800000
Isso é melhor.
Se você ainda receber a mensagem de erro acima, deve estar tentando retornar um realmente grande número. Nesse caso, você precisará fazer pelo menos um dos seguintes:
- Use um período de tempo mais curto.
- Use um datepart menos preciso . Por exemplo, em vez de tentar retornar o número de milissegundos, tente com apenas alguns segundos.
Observe também que você precisará executar pelo menos o SQL Server 2016 antes de usar o
DATEDIFF_BIG()
função.