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

So sánh ngày tháng trong T-SQL, bỏ qua phần thời gian

Cách hợp lý nhất để làm điều này là loại bỏ phần thời gian của các giá trị ngày giờ và so sánh kết quả và cách tốt nhất để tách phần thời gian khỏi ngày giờ là như sau:

cast(current_timestamp as date)    

Tôi đã từng sử dụng và ủng hộ một quy trình trông giống như một trong hai dòng sau:

cast(floor(cast(getdate() as float)) as datetime)
dateadd(dd,0, datediff(dd,0, getDate()))

Nhưng bây giờ Máy chủ Sql đó có Date loại, không chứa thành phần thời gian, có rất ít lý do để sử dụng một trong hai kỹ thuật đó.

Một điều nữa cần lưu ý là điều này sẽ vẫn làm hỏng một truy vấn nếu bạn cần thực hiện nó cho hai giá trị datetime cho mọi hàng trong mệnh đề where hoặc điều kiện nối. Nếu có thể, bạn muốn giải quyết vấn đề này bằng cách nào đó để nó được tính toán trước càng nhiều càng tốt, chẳng hạn như sử dụng chế độ xem hoặc cột được tính toán.

Cuối cùng, hãy lưu ý hàm DATEDIFF so sánh số lượng ranh giới vượt qua. Điều này có nghĩa là ngày tháng tính theo ngày từ '2009-09-14 11:59:59''2009-09-15 00:00:01' là 1, mặc dù chỉ còn 2 giây trôi qua, nhưng DATEDIFF trong các ngày từ '2009-09-15 00:00:01''2009-09-15 11:59:59' vẫn là 0, mặc dù 86.398 giây đã trôi qua. Nó không thực sự quan tâm đến phần thời gian ở đó, chỉ có ranh giới. Tùy thuộc vào những gì truy vấn của bạn đang cố gắng thực hiện, bạn có thể sử dụng điều đó để làm lợi thế cho mình.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách khôi phục cơ sở dữ liệu SQL Server trên máy Mac bằng Azure Data Studio

  2. Cách đặt giá trị mặc định cho cột hiện có

  3. Kiểm tra tình trạng máy chủ SQL chủ động, Phần 4:LỖI

  4. Cách tốt nhất để chia nhỏ dữ liệu XML thành các cột cơ sở dữ liệu SQL Server

  5. Kết hợp giá trị trường thành chuỗi trong SQL Server