Tôi có một trường SQL datetime
trong một bảng rất lớn. Nó được lập chỉ mục và cần được truy vấn.Cách tối ưu để so sánh ngày tháng trong máy chủ Microsoft SQL là gì?
Vấn đề là SQL luôn lưu trữ thành phần thời gian (mặc dù nó luôn là nửa đêm), nhưng các tìm kiếm là ngày, chứ không phải là thời gian.
declare @dateVar datetime = '2013-03-11;
select t.[DateColumn]
from MyTable t
where t.[DateColumn] = dateVar;
Sẽ không trả lại bất kỳ điều gì vì t.[DateColumn]
luôn bao gồm thành phần thời gian.
Câu hỏi của tôi là cách tốt nhất là gì?
Dường như có hai nhóm chính của lựa chọn:
Tạo một biến thứ hai sử dụng
dateadd
và sử dụng mộtbetween ... and
hoặc>= ... and ... <=
.Chuyển đổi
t.[DateColumn]
thành thành phần chỉ có ngày - Tôi nghĩ điều này sẽ khiến mọi chỉ mục bị bỏ qua.
Cả hai điều này dường như rất lộn xộn - Tôi thực sự không muốn so sánh phạm vi hoặc quét bảng.
Có cách nào tốt hơn không?
Nếu một trong các tùy chọn này là cách tối ưu nhất quán thì làm cách nào và tại sao?
@Keith Cảm ơn bạn đã chỉ định các ví dụ .. và câu hỏi hay;) –