Cách hợp lý nhất để làm điều này là loại bỏ phần thời gian của các giá trị ngày giờ và so sánh kết quả và cách tốt nhất để tách phần thời gian khỏi ngày giờ là như sau:
cast(current_timestamp as date)
Tôi đã từng sử dụng và ủng hộ một quy trình trông giống như một trong hai dòng sau:
cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))
Nhưng bây giờ Máy chủ Sql đó có Date
loại, không chứa thành phần thời gian, có rất ít lý do để sử dụng một trong hai kỹ thuật đó.
Một điều nữa cần lưu ý là điều này sẽ vẫn làm hỏng một truy vấn nếu bạn cần thực hiện nó cho hai giá trị datetime cho mọi hàng trong mệnh đề where hoặc điều kiện nối. Nếu có thể, bạn muốn giải quyết vấn đề này bằng cách nào đó để nó được tính toán trước càng nhiều càng tốt, chẳng hạn như sử dụng chế độ xem hoặc cột được tính toán.
Cuối cùng, hãy lưu ý hàm DATEDIFF so sánh số lượng ranh giới vượt qua. Điều này có nghĩa là ngày tháng tính theo ngày từ '2009-09-14 11:59:59'
và '2009-09-15 00:00:01'
là 1, mặc dù chỉ còn 2 giây trôi qua, nhưng DATEDIFF trong các ngày từ '2009-09-15 00:00:01'
và '2009-09-15 11:59:59'
vẫn là 0, mặc dù 86.398 giây đã trôi qua. Nó không thực sự quan tâm đến phần thời gian ở đó, chỉ có ranh giới. Tùy thuộc vào những gì truy vấn của bạn đang cố gắng thực hiện, bạn có thể sử dụng điều đó để làm lợi thế cho mình.