Nghiêm túc, phương thức a
ít sử dụng tài nguyên nhất:
a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Đã được chứng minh là ít sử dụng CPU hơn trong cùng một thời lượng cả triệu hàng bởi ai đó có quá nhiều thời gian trong tay:Cách hiệu quả nhất trong SQL Server để lấy ngày từ ngày + giờ?
Tôi cũng thấy một bài kiểm tra tương tự ở nơi khác với kết quả tương tự.
Tôi thích DATEADD / DATEDIFF vì:
- varchar có vấn đề về ngôn ngữ / định dạng ngày.
Ví dụ:Tại sao biểu thức CASE của tôi không xác định? - float dựa vào bộ nhớ trong
- nó mở rộng để hoạt động vào ngày đầu tiên của tháng, ngày mai, v.v. bằng cách thay đổi cơ sở "0"
Chỉnh sửa, tháng 10 năm 2011
Đối với SQL Server 2008+, bạn có thể ĐÚC thành date
tức là CAST(getdate() AS date)
. Hoặc chỉ sử dụng date
kiểu dữ liệu để không có time
để loại bỏ.
Chỉnh sửa, tháng 1 năm 2012
Một ví dụ hiệu quả về mức độ linh hoạt của điều này:Cần tính toán bằng con số thời gian hoặc ngày được làm tròn trong máy chủ sql
Chỉnh sửa, tháng 5 năm 2012
Không sử dụng điều này trong mệnh đề WHERE và những điều tương tự mà không cần suy nghĩ:thêm một hàm hoặc CAST vào một cột sẽ làm mất hiệu lực sử dụng chỉ mục. Xem số 2 tại đây Các lỗi lập trình SQL phổ biến
Bây giờ, điều này có một ví dụ về các phiên bản tối ưu hóa SQL Server sau này quản lý CAST cho đến nay một cách chính xác, nhưng nói chung đó sẽ là một ý tưởng tồi ...
Chỉnh sửa, tháng 9 năm 2018, cho datetime2
DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'
select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)