Cách tốt nhất là:
SELECT DATEADD(day, DATEDIFF(Day, 0, @ADate), 0)
Điều này là do bên trong, SQL Server lưu trữ tất cả các ngày dưới dạng hai số nguyên, trong đó số đầu tiên là số **** ngày *** kể từ ngày 1 tháng 1 năm 1900. (số thứ hai là phần thời gian, được lưu trữ dưới dạng số giây kể từ Nửa đêm. (giây cho SmallDateTime
s hoặc mili giây cho DateTime
s)
Sử dụng biểu thức trên sẽ tốt hơn vì nó tránh được tất cả các chuyển đổi, trực tiếp đọc và truy cập số nguyên đầu tiên đó trong biểu diễn nội bộ ngày tháng mà không cần phải thực hiện bất kỳ xử lý nào ... hai số 0 trong biểu thức trên (đại diện cho 1 Tháng 1 năm 1900), cũng được sử dụng trực tiếp để xử lý hoặc chuyển đổi w / o, vì chúng khớp với biểu diễn nội bộ của máy chủ SQL của ngày 1 tháng 1 năm 1900 chính xác như được trình bày (dưới dạng số nguyên) ..
*GHI CHÚ. Trên thực tế, số lượng ranh giới ngày (nửa đêm) bạn phải vượt qua để đi từ ngày này sang ngày kia.