Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Errore di overflow aritmetico durante la conversione dell'espressione nel tipo di dati datetime

Il 31 settembre non è una data, quindi SQL non può convertirla in una data.

Per inciso, dovresti codificare le date in un formato specifico per le impostazioni cultura (aaaaMMgg). 01/08/2012 potrebbe essere convertito al 1 agosto sul tuo server, ma eseguito su un altro e potrebbe essere l'8 gennaio. 20120801 verrà convertito al 1° agosto su tutti macchine.

Inoltre, perché stai convertendo le date in NVARCHAR ? Stai rimuovendo qualsiasi vantaggio degli indici che hai e stai anche eseguendo conversioni implicite ed esplicite inutili. Assumendo MESSAGEINSERTDATE è una colonna DATETIME che potresti semplicemente usare

WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'

Se è necessario rimuovere l'ora da MESSAGEINSERTDATE usa

CAST(MESSAGEINSERTDATE AS DATE)