31 सितंबर कोई तारीख नहीं है, इसलिए SQL इसे एक में नहीं बदल सकता।
एक तरफ के रूप में आपको एक संस्कृति विशिष्ट प्रारूप (yyyyMMdd) में हार्ड कोड तिथियां होनी चाहिए। 01/08/2012 आपके सर्वर पर 1 अगस्त में परिवर्तित हो सकता है, लेकिन दूसरे पर चलता है और यह 8 जनवरी हो सकता है। 20120801 सभी . को 1 अगस्त में बदल जाएगा मशीनें।
इसके अलावा आप तारीखों को NVARCHAR में क्यों बदल रहे हैं? ? आप अपने पास मौजूद सूचकांकों के किसी भी लाभ को हटा रहे हैं, और अनावश्यक रूप से निहित और स्पष्ट रूपांतरण भी कर रहे हैं। मान लें कि MESSAGEINSERTDATE एक DATETIME कॉलम है जिसका आप अभी उपयोग कर सकते हैं
WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'
अगर आपको MESSAGEINSERTDATE . से समय निकालना है उपयोग करें
CAST(MESSAGEINSERTDATE AS DATE)