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

Làm cách nào để so sánh hai trường datetime trong SQL Server 2005?

Câu hỏi không rõ ràng, nhưng có vẻ như bạn đang cố gắng thực hiện đối sánh bình đẳng không trả về các hàng bạn mong đợi, vì vậy tôi đoán rằng vấn đề là phần nghìn giây đang có vấn đề. Có một số cách tiếp cận ở đây:

  1. định dạng cả hai giá trị (dưới dạng varcharetc) bằng CONVERT:forCPU đắt, không thể sử dụng chỉ mục
  2. sử dụng DATEDIFF / DATEPART để thực hiện chúng - tương tự, nhưng không hoàn toàn không đắt tiền
  3. tạo một phạm vi để tìm kiếm giữa

Tùy chọn thứ 3 hầu như luôn luôn hiệu quả nhất, vì nó có thể tận dụng tốt việc lập chỉ mục và không yêu cầu khối lượng CPU lớn.

Ví dụ:trong phần trên, vì độ chính xác của bạn là giây *, tôi sẽ sử dụng:

DECLARE @end datetime
SET @end = DATEADD(ss,1,@p_date)

sau đó thêm WHERE của biểu mẫu:

WHERE column_datetime >= @p_date AND column_datetime < @end

Điều này sẽ hoạt động tốt nhất nếu bạn có chỉ mục được phân cụm trên column_datetime, nhưng vẫn sẽ hoạt động tốt nếu bạn có chỉ mục không được phân cụm trên column_datetime.

[* =nếu @p_date bao gồm mili giây, bạn cần suy nghĩ thêm về việc có nên cắt bớt những mili giây đó qua DATEADD hay không hoặc thực hiện một phạm vi nhỏ hơn, v.v.]



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. So sánh ngày của SQL Server chỉ dựa trên tháng và năm

  2. Phải khai báo lỗi biến @myvariable với truy vấn được tham số ADO

  3. Đưa trang tính Excel vào bảng tạm thời bằng cách sử dụng tập lệnh

  4. Cách chèn dữ liệu xml vào bảng trong SQL Server 2005

  5. Chọn các mục như bản ghi từ một cột trong bảng khác