Mencari Jumlah Hari Kerja / Jumlah Selisih Hari Kerja

Query untuk mencari jumlah selisih hari kerja
Jika terjadi error hilangkan tanda ‘-- ’ dan sebelum when Tanggal pertama dan kedua
SET @TGL_PERTAMA = '2012-01-02';
SET @TGL_KEDUA = '2012-01-02';
select (
(CASE WHEN WEEKDAY(@TGL_PERTAMA) not in (5,6) && WEEKDAY(@TGL_KEDUA) = 5 THEN DATEDIFF(@TGL_KEDUA, @TGL_PERTAMA) -- Jika tgl_pertama <> sabtu/minggu dan tanggal kedua = Sabtu
WHEN WEEKDAY(@TGL_PERTAMA) not in (5, 6) && WEEKDAY(@TGL_KEDUA) = 6 THEN (DATEDIFF(@TGL_KEDUA, @TGL_PERTAMA) - 2) -- Jika Tanggal Pertama <> SABTU/MINGGU dan TANGGAL KEDUA = MINGGU
WHEN WEEKDAY(@TGL_PERTAMA) = 5 && WEEKDAY(@TGL_KEDUA) = 6 THEN (DATEDIFF(@TGL_KEDUA, @TGL_PERTAMA)- 1) -- JIKA TANGGAL PERTAMA = SABTU DAN TANGGAL KEDUA = MINGGU
WHEN WEEKDAY(@TGL_PERTAMA) = 5 && WEEKDAY(@TGL_KEDUA) = 5 THEN (DATEDIFF(@TGL_KEDUA, @TGL_PERTAMA) + 1) -- JIKA TANGGAL PERTAMA = SABTU DAN TANGGAL KEDUA = SABTU
WHEN WEEKDAY(@TGL_PERTAMA) = 6 && WEEKDAY(@TGL_KEDUA) in (5, 6) THEN (DATEDIFF(@TGL_KEDUA, @TGL_PERTAMA)+ 1) -- JIKA TANGGAL PERTAMA = MINGGU DAN TANGGAL KEDUA = SABTU / MINGGU
WHEN WEEKDAY(@TGL_PERTAMA) = 5 && WEEKDAY(@TGL_KEDUA) not in (5, 6) THEN (DATEDIFF(@TGL_KEDUA, @TGL_PERTAMA) -1) -- JIKA TANGGAL PERTAMA = SABTU DAN TANGGAL KEDUA <> SABTU / MINGGU
WHEN WEEKDAY(@TGL_PERTAMA) = 6 && WEEKDAY(@TGL_KEDUA) not in (5,6) THEN (DATEDIFF(@TGL_KEDUA, @TGL_PERTAMA) + 1) -- JIKA TANGGAL PERTAMA = MINGGU DAN TANGGAL KEDUA <> SABTU / MINGGU
WHEN WEEKDAY(@TGL_PERTAMA) not in (5, 6) && WEEKDAY(@TGL_KEDUA) not in (5, 6) && WEEKDAY(@TGL_PERTAMA) > WEEKDAY(@TGL_KEDUA) THEN (DATEDIFF(@TGL_KEDUA, @TGL_PERTAMA) - 2) -- JIKA TANGGAL PERTAMA <> SABTU / MINGGU DAN TANGGAL KEDUA <> SABTU / MINGGU
ELSE DATEDIFF(@TGL_KEDUA, @TGL_PERTAMA) END
) -- SELAIN KASUS DI ATAS
- (FLOOR(DATEDIFF(@TGL_KEDUA, @TGL_PERTAMA) / 7) * 2)
- (CASE WHEN WEEKDAY(@TGL_PERTAMA) = 6 THEN 1 ELSE 0 END)
- (CASE WHEN WEEKDAY(@TGL_KEDUA) = 5 THEN 1 ELSE 0 END)) AS HARIKERJA

Query Untuk Mencari Jumlah Hari Kerja :
SET @TGL_PERTAMA = '2012-01-02';
SET @TGL_KEDUA = '2012-01-02';
select (
(DATEDIFF(@TGL_KEDUA,@TGL_PERTAMA)+1
) -- SELAIN KASUS DI ATAS
- (FLOOR(DATEDIFF(@TGL_KEDUA, @TGL_PERTAMA) / 7) * 2)
- (CASE WHEN WEEKDAY(@TGL_PERTAMA) = 6 THEN 1 ELSE 0 END)
- (CASE WHEN WEEKDAY(@TGL_KEDUA) = 5 THEN 1 ELSE 0 END)) AS HARIKERJA

Perbedaan kasus di atas :
- Untuk QUERY pertama Jika Hari pertama adalah hari kerja dia tidak di hitung contoh : dari tanggal 02 Januari 2012 (Senin) dan hari kedua 02 Januari 2012 (Senin) makan totalnya = 0 selisih) karena di hari yang sama tidak di hitung (Biasanya Untuk lama penyelesaian tidak termasuk hari kerja)
- Untuk Query kedua jika hari pertama adalah hari kerja maka tetap di hitung, contoh : dari tanggal 02 Januari 2012 (Senin) dan Hari kedua 02 Januari 2012 (Senin) maka jumlah total hari kerjanya adalah 1 (Biasanya untuk menghitung Hari Kerja)


KEDUA QUERY diatas telah di ujicoba menggunakan MYSQL 4.0 dan IDE NAVICAT 8

Posting Komentar

0 Komentar