คำสั่ง SQL นับวันไม่รวมเสาร์-อาทิตย์ และวันหยุด

wave
มานพ กองอุ่น 31 ก.ค. 2017 15:56:05 16,321

ตัวอย่างคำสั่ง SQL เพื่อนับจำนวนวันโดยไม่รวมวันเสาร์-อาทิตย์ และวันหยุด

SELECT DATEDIFF(d, '2017-01-01', '2017-01-31') - DATEDIFF(wk, '2017-01-01', '2017-01-31') * 2 - CASE WHEN DATENAME(dw, '2017-01-01') 
                         <> 'Saturday' AND DATENAME(dw, '2017-01-31') = 'Saturday' THEN 1 WHEN DATENAME(dw, '2017-01-01') = 'Saturday' AND DATENAME(dw, '2017-01-31') <> 'Saturday' THEN - 1 ELSE 0 END - 2 AS date_count

ตัวอย่างนี้จะนับจำนวนวันในเดือนมกราคมปี 2017 ซึ่งมีวันหยุด 2 วัน (...END - 2 )

ผลลัพท์ date_count = 20

หมายเหตุ วันหยุด จำนวน 2 วัน (...END - 2 ) นั้น เราสามารถสร้างตารางในการเก็บวันหยุด แล้ว SELECT COUNT() มาได้ เช่น ตารางชื่อ hr_day_off

 (SELECT        COUNT(*) AS Expr1
                               FROM            dbo.hr_day_off AS day_off
                               WHERE        (day_off.off_at BETWEEN '2017-01-01' AND '2017-01-31') AND (DATENAME(dw, day_off.off_at) <> 'Saturday') AND (DATENAME(dw, day_off.off_at) <> 'Sunday'))

เอาคำสั่งนี้แทนเลข 2 (...END - 2 )นะฮัฟ ...เพื่อมวลมนุษยชาติ


ความคิดเห็น

หากบทเรียนรู้มีความผิดพลาดประการใด หรือมีข้อเสนอแนะกรุณาแจ้ง contact@programmerthailand.com