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

nhận được DATEDIFF không bao gồm các ngày cuối tuần bằng máy chủ sql

Truy vấn ví dụ bên dưới, đây là một số chi tiết về cách tôi đã giải quyết nó.

Sử dụng DATEDIFF(WK, ...) sẽ cho chúng ta số tuần giữa 2 ngày. SQL Server đánh giá đây là sự khác biệt giữa các số tuần thay vì dựa trên số ngày. Điều này là hoàn hảo, vì chúng tôi có thể sử dụng điều này để xác định có bao nhiêu ngày cuối tuần trôi qua giữa các ngày.

Vì vậy, chúng tôi có thể nhân giá trị đó với 2 để lấy số ngày cuối tuần đã xảy ra và trừ giá trị đó khỏi DATEDIFF(dd, ...) để lấy số ngày trong tuần.

Tuy nhiên, điều này không hoạt động chính xác 100% khi ngày bắt đầu hoặc ngày kết thúc rơi vào Chủ nhật. Vì vậy, tôi đã thêm một số logic trường hợp vào cuối phép tính để xử lý các trường hợp đó.

Bạn cũng có thể muốn xem xét có hay không DATEDIFF nên được bao gồm đầy đủ. ví dụ. Sự khác biệt giữa 9/10 và 11/9 là 1 ngày hay 2 ngày? Nếu sau này, bạn sẽ muốn thêm 1 vào sản phẩm cuối cùng.

declare @d1 datetime, @d2 datetime
select @d1 = '9/9/2011',  @d2 = '9/18/2011'

select datediff(dd, @d1, @d2) - (datediff(wk, @d1, @d2) * 2) -
       case when datepart(dw, @d1) = 1 then 1 else 0 end +
      case when datepart(dw, @d2) = 1 then 1 else 0 end


  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ơ sở dữ liệu .NET gọi chậm khi sử dụng COM Interop, nhanh qua trình phân tích truy vấn

  2. Sự khác biệt giữa sys.parameters, sys.system_parameters và sys.all_parameters trong SQL Server

  3. TYPE do người dùng xác định trên các cơ sở dữ liệu

  4. Xoay vòng dữ liệu hai lần với sql động và tên cột tùy chỉnh

  5. Nâng cấp nền tảng dữ liệu SQL Server vào năm 2015