Estou recebendo um erro de estouro aritmético e não consigo descobrir o caso.
Recentemente, tive que ajustar alguns procedimentos armazenados, para permitir a inclusão de datas no futuro.
A seguinte parte da extração de dados resultante agora falha com erros de estouro aritmético:
SELECT
CONVERT(varchar(8),DATEDIFF(week, CONVERT(date,convert(varchar(8),Column1)), GETDATE()))/[Column2]
FROM Table1;
Não sei ao certo por que esse erro está ocorrendo.
Não há mais de 8 caracteres em qualquer entrada e alterá-la para varchar(max)
não faz nada (como seria de esperar).
Remover o /[Column2]
remove o erro, mas não consigo descobrir o porquê.
EDIT:
CAST([Column2] as numeric(8))
faz o truque.
No entanto, select max(len([Column2]))
diz que o campo mais longo tem 2 caracteres.
[Column1]
é um decimal (32,0)
[Column2]
é um decimal (3,0)
Então o que está acontecendo? Por que isso está causando um problema?
Você recebe o erro porque essencialmente no final você está dividindo uma string de 8 caracteres por um valor numérico que tem precisão de 3 como este exemplo abaixo
O SQL Server tenta internamente e falha
convert
VARCHAR(8)
comDECIMAL(3,0)
o seu erro.CAST([Column2] as numeric(8))
funciona porque agoraVARCHAR(8)
pode ser convertido paranumeric(8)
.Você realmente não precisa converter
DATEDIFF(week, CONVERT(date,convert(varchar(8),Column1)), GETDATE())
paraVARCHAR(8)