Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

dapatkan DATEDIFF tidak termasuk akhir pekan menggunakan sql server

Contoh kueri di bawah ini, berikut adalah beberapa detail tentang cara saya menyelesaikannya.

Menggunakan DATEDIFF(WK, ...) akan memberi kita jumlah minggu antara 2 tanggal. SQL Server mengevaluasi ini sebagai perbedaan antara angka minggu daripada berdasarkan jumlah hari. Ini sempurna, karena kita dapat menggunakan ini untuk menentukan berapa banyak akhir pekan yang berlalu di antara tanggal-tanggal tersebut.

Jadi kita bisa mengalikan nilai itu dengan 2 untuk mendapatkan jumlah hari akhir pekan yang terjadi dan menguranginya dari DATEDIFF(dd, ...) untuk mendapatkan jumlah hari kerja.

Ini tidak berperilaku 100% dengan benar ketika tanggal mulai atau akhir jatuh pada hari Minggu. Jadi saya menambahkan dalam beberapa kasus logika di akhir perhitungan untuk menangani kasus tersebut.

Anda mungkin juga ingin mempertimbangkan apakah DATEDIFF harus sepenuhnya inklusif. misalnya Apakah perbedaan antara 9/10 dan 9/11 1 hari atau 2 hari? Jika yang terakhir, Anda ingin menambahkan 1 ke produk akhir.

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. Apakah lebih cepat untuk MEMPERBARUI satu baris, atau MENGHAPUS dan MEMASUKKAN yang baru?

  2. Entity Framework - Mendapatkan panjang data dalam kolom teks

  3. Cara Menentukan Collation dalam Query di SQL Server (T-SQL)

  4. Menghubungkan Aplikasi UWP ke penyedia Remote SQL Server 2008:Penyedia TCP, kesalahan:0

  5. SQL 2008 - varchar (maks) vs tipe data teks