31 септември не е дата, така че SQL не може да я преобразува в такава.
Освен това трябва да кодирате твърдо датите в неспецифичен за култура формат (ггггММдд). 01/08/2012
може да се преобразува на 1 август на вашия сървър, но да работи на друг и може да е 8 януари. 20120801 ще се преобразува в 1 август на всички машини.
Освен това защо конвертирате датите в NVARCHAR
? Вие премахвате всички предимства на индексите, които имате, и също така извършвате ненужни неявни и явни преобразувания. Приемайки MESSAGEINSERTDATE
е колона DATETIME, която можете просто да използвате
WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'
Ако трябва да премахнете часа от MESSAGEINSERTDATE
използвайте
CAST(MESSAGEINSERTDATE AS DATE)