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

Menghitung hari untuk mengecualikan akhir pekan (Senin hingga Jumat) di SQL Server

Saya akan selalu merekomendasikan Tabel Kalender , maka Anda cukup menggunakan:

SELECT  COUNT(*)
FROM    dbo.CalendarTable
WHERE   IsWorkingDay = 1
AND     [Date] > @StartDate
AND     [Date] <= @EndDate;

Karena SQL tidak memiliki pengetahuan tentang hari libur nasional, misalnya jumlah hari kerja antara dua tanggal tidak selalu mewakili jumlah hari kerja. Inilah sebabnya mengapa tabel kalender adalah suatu keharusan bagi sebagian besar database. Mereka tidak memakan banyak memori dan menyederhanakan banyak kueri.

Tetapi jika ini bukan pilihan maka Anda dapat membuat tabel tanggal dengan relatif mudah dengan cepat dan menggunakan ini

SET DATEFIRST 1;
DECLARE @StartDate DATETIME = '20131103', 
        @EndDate DATETIME = '20131104';

-- GENERATE A LIST OF ALL DATES BETWEEN THE START DATE AND THE END DATE
WITH AllDates AS
(   SELECT  TOP (DATEDIFF(DAY, @StartDate, @EndDate))
            D = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.Object_ID), @StartDate)
    FROM    sys.all_objects a
            CROSS JOIN sys.all_objects b
)
SELECT  WeekDays = COUNT(*)
FROM    AllDates
WHERE   DATEPART(WEEKDAY, D) NOT IN (6, 7);

EDIT

Jika Anda perlu menghitung selisih antara dua kolom tanggal, Anda masih dapat menggunakan tabel kalender sebagai berikut:

SELECT  t.ID,
        t.Date1,
        t.Date2,
        WorkingDays = COUNT(c.DateKey)
FROM    TestTable t
        LEFT JOIN dbo.Calendar c
            ON c.DateKey >= t.Date1
            AND c.DateKey < t.Date2
            AND c.IsWorkingDay = 1
GROUP BY t.ID, t.Date1, t.Date2;

Contoh pada SQL-Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ambil ID dari catatan yang dimasukkan:Php &MS SQL SERVER

  2. Kebuntuan pada SELECT/UPDATE

  3. INT vs Unique-Identifier untuk bidang ID di database

  4. Cara Memeriksa Pengaturan Konfigurasi untuk Database Mail di SQL Server (T-SQL)

  5. Dapatkan karakter antara 2 karakter khusus pertama dalam SQL