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

Chuyển đổi các trường ngày giờ của máy chủ SQL để chỉ so sánh các phần ngày, với các tra cứu được lập chỉ mục

Cách tốt nhất để loại bỏ phần thời gian của trường datetime là sử dụng các hàm dateiff và dateadd.

   DateAdd(day, datediff(day,0, MydateValue), 0)

Điều này có lợi khi SQL Server lưu trữ ngày tháng dưới dạng hai số nguyên, một đại diện cho số ngày kể từ ngày "0" - (1 tháng 1 năm 1900) và cái thứ hai đại diện cho số tick (mỗi tích tắc khoảng 3,33 ms) kể từ nửa đêm (cho thời gian) *.

công thức trên chỉ đơn giản là chỉ đọc số nguyên đầu tiên. Không có chuyển đổi hoặc xử lý yêu cầu, vì vậy nó cực kỳ nhanh chóng.

Để thực hiện các truy vấn của bạn sử dụng chỉ mục ... trước tiên hãy sử dụng công thức này trên các tham số lọc đầu vào hoặc ở phía "bên kia" của dấu bằng từ trường ngày giờ của bảng, để trình tối ưu hóa truy vấn không phải chạy phép tính trên mọi trường ngày giờ trong bảng để xác định hàng nào đáp ứng vị từ bộ lọc. Điều này làm cho đối số tìm kiếm của bạn "có thể SARG" (Tìm kiếm ARGument)

Where MyDateTimeColumn > DateAdd(day, 
      datediff(day,0, @MydateParameter), 0)    -- SARG-able

hơn là

Where DateAdd(day, datediff(day,0, 
      MyDateTimeColumn ), 0) > @MydateParameter -- Not SARG-able

* GHI CHÚ. Bên trong, số nguyên thứ hai (phần thời gian) lưu trữ các tích tắc. Trong một ngày, có 24 x 60 X 60 X 300 =25,920,000 tick (tình cờ ngay dưới giá trị tối đa mà một số nguyên 32 bit có thể giữ). Tuy nhiên, bạn không cần phải lo lắng về điều này khi sửa đổi số học ngày giờ ... Khi cộng hoặc trừ các giá trị từ ngày giờ, bạn có thể coi giá trị dưới dạng một phân số như thể nó chính xác bằng phần phân số của một ngày, như thể giá trị ngày giờ hoàn chỉnh là một số dấu phẩy động bao gồm một phần nguyên đại diện cho ngày và một phần thập phân đại diện cho thời gian). tức là,

`Declare @Dt DateTime  Set @Dt = getdate()  
 Set @Dt = @Dt + 1.0/24  -- Adds one hour  
 Select @Dt  
 Set @Dt = @Dt - .25 -- Moves back 6 hours  
 Select @Dt`


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server REPLACE () so với TRANSLATE ():Sự khác biệt là gì?

  2. Sao chép dữ liệu vào một bảng khác

  3. Quy trình lưu trữ Sql với rất nhiều tham số

  4. SYSDATETIME () Ví dụ trong SQL Server (T-SQL)

  5. SQL Server Trigger:Hiểu biết và Các giải pháp thay thế