Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách so sánh datetime với chỉ ngày trong SQL Server

ĐỪNG bị cám dỗ làm những việc như thế này:

Select * from [User] U where convert(varchar(10),U.DateCreated, 120) = '2014-02-07'

Đây là một cách tốt hơn:

Select * from [User] U 
where U.DateCreated >= '2014-02-07' and U.DateCreated < dateadd(day,1,'2014-02-07')

xem:Từ “SARGable” thực sự có nghĩa là gì?

CHỈNH SỬA + Có 2 lý do cơ bản để tránh sử dụng các hàm trên dữ liệu trong mệnh đề where (hoặc trong điều kiện nối).

  1. Trong hầu hết các trường hợp, việc sử dụng một hàm trên dữ liệu để lọc hoặc kết hợp sẽ loại bỏ khả năng của trình tối ưu hóa để truy cập chỉ mục trên trường đó, do đó làm cho truy vấn chậm hơn (hoặc "tốn kém" hơn)
  2. Khác là, đối với mỗi hàng dữ liệu liên quan, có ít nhất một phép tính được thực hiện. Điều đó có thể là thêm hàng trăm, hàng nghìn hoặc hàng triệu phép tính vào truy vấn để chúng tôi có thể so sánh với một tiêu chí đơn lẻ như 2014-02-07 . Thay vào đó, việc thay đổi các tiêu chí cho phù hợp với dữ liệu sẽ hiệu quả hơn nhiều.

"Sửa đổi tiêu chí cho phù hợp với dữ liệu" là cách tôi mô tả "sử dụng SARGABLE vị ngữ "

Và không sử dụng giữa một trong hai.

thực tiễn tốt nhất với phạm vi ngày và giờ là tránh GIỮA và luôn sử dụng biểu mẫu:

WHERE col> ='20120101' AND col <'20120201' Biểu mẫu này hoạt động với tất cả các loại và tất cả các lựa chọn, bất kể phần thời gian có thể áp dụng được hay không.

http://sqlmag.com/t-sql/t-sql-best-practices-part-2 (Itzik Ben-Gan)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Liệt kê tất cả cơ sở dữ liệu từ một máy chủ được liên kết trong SQL Server (Ví dụ T-SQL)

  2. Sử dụng câu lệnh UPDATE có điều kiện trong SQL

  3. Cách tạo Ràng buộc Kiểm tra trên Cột Đơn trong SQL Server - Hướng dẫn SQL Server / TSQL Phần 83

  4. Tối ưu hóa truy vấn SQL:Các phương pháp hay nhất để cải thiện hiệu suất

  5. Chuyển đổi ‘datetimeoffset’ thành ‘datetime2’ trong SQL Server (Ví dụ T-SQL)