Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Erro de estouro aritmético ao converter expressão para tipo de dados datetime


O dia 31 de setembro não é uma data, então o SQL não pode convertê-lo em uma.

Como um aparte, você deve codificar datas em um formato inespecífico de cultura (aaaaMMdd). 01/08/2012 pode converter para 1º de agosto no seu servidor, mas rodar em outro e pode ser 8 de janeiro. 20120801 será convertido para 1º de agosto em todos máquinas.

Além disso, por que você está convertendo datas para NVARCHAR ? Você está removendo qualquer benefício dos índices que possui e também realizando conversões implícitas e explícitas desnecessárias. Assumindo MESSAGEINSERTDATE é uma coluna DATETIME que você pode usar
WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'

Se você precisar remover a hora de MESSAGEINSERTDATE usar
CAST(MESSAGEINSERTDATE AS DATE)