Ngày 31 tháng 9 không phải là một ngày, vì vậy SQL không thể chuyển đổi nó thành một ngày.
Ngoài ra, bạn nên mã hóa ngày tháng ở định dạng kiểm tra văn hóa cụ thể (yyyyMMdd). 01/08/2012
có thể chuyển đổi thành ngày 1 tháng 8 trên Máy chủ của bạn, nhưng chạy trên máy chủ khác và có thể là ngày 8 tháng 1. 20120801 sẽ chuyển đổi sang ngày 1 tháng 8 trên tất cả máy móc.
Ngoài ra, Tại sao bạn chuyển đổi ngày thành NVARCHAR
? Bạn đang xóa bất kỳ lợi ích nào trong số các chỉ số mà bạn có, đồng thời thực hiện các chuyển đổi ngầm và rõ ràng không cần thiết. Giả sử MESSAGEINSERTDATE
là Cột DATETIME mà bạn chỉ có thể sử dụng
WHERE MESSAGEINSERTDATE BETWEEN '20120801' AND '20120930'
Nếu bạn cần xóa thời gian khỏi MESSAGEINSERTDATE
sử dụng
CAST(MESSAGEINSERTDATE AS DATE)