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)