HOSxP Tip
SQL Tip แจกวันหยุดปีพ.ศ. 2562 พร้อมโค้ด SQL หาวันหยุด

SQL Tip แจกวันหยุดปีพ.ศ. 2562 พร้อมโค้ด SQL หาวันหยุด

มีน้องๆ admin มือใหม่ (เพิ่งรับงาน) ขอข้อมูลตาราง holiday ปี 2562  ว่าจะเพิ่มยังไง หรือมีให้ดาวโหลดไหมครับ
ผมเลยมาบอกวิธีหาวันหยุด และใช้วิธีนำเข้า  อ้า…ลองมาอ่านวิธีดูละกันนะครับ

คนที่ไม่รู้ว่าคืออะไร ก็บอกคร่าว ๆ ละกันนะ เป็นตาราง holiday ที่เก็บข้อมูลวันหยุด ที่ใช้สำหรับกรณีจะนัดคนไข้ ให้เช็ควันหยุดก่อน ว่าหยุดเสาร์-อาทิตย์-หรือหยุดวันนักขัตฤกษ์  หรือไม่  ประมาณนี้นะครับ  พยาบาลจะได้ทราบ

ขั้นตอนแรกเลย  ใช้โค้ดนี้ตรวจสอบก่อน ว่าปีพ.ศ. 2562  ในตาราง hosxp ฐานที่เราใช้ มีข้อมูลแล้วหรือยัง
*********
select day_name,count(*)as count_date,holiday_date from holiday where year(holiday_date) = ‘2019’
group by day_name
union
select “รวมทั้งสิ้น”as day_name,count(*)as count_date,”-” as holiday_date from holiday where year(holiday_date) = ‘2019’
order by count_date

**********

ถ้ามีอยู่แล้ว  ตามรูป ก็น่าจะไม่ต้องทำอะไรต่อ  เพราะมีข้อมูลวันหยุดแล้ว  เพียงแค่ตรวจสอบว่า มีครบแล้วหรือถูกต้องแล้วหรือยัง  (อันนี้ผมก็เพิ่มตามที่มีคนแจ้งเข้ามาและหาในเว็บ google )

ถ้ายังไม่มี ก็มาอ่านขั้นตอนที่ 2 นะครับ

ขั้นตอนที่  2 หาวันหยุด (เสาร์ และ อาทิตย์)
โดยใช้ sql script ตัวนี้นะครับ  *** ดาวโหลด  ***

เมื่อเอารันใน HOSxP ในเมนูสายฟ้า ก็จะได้ข้อมูล  104 record






อธิบายโค้ดก่อนละกัน เดี่ยวบางคนจะงง ๆ ว่ามาได้ไง
แบ่งเป็น 2 ส่วนนะครับคือส่วนที่ดึงข้อมูลเมื่อเพื่อคำนวณ  คือ
ส่วนที  1  คือ

select @start_day , @end_day,
if(@count_x < @count_day , @count_x := @count_x+1,0) as xxx,
str_to_date(date_format(date_add(@day_plus, interval @count_x day),’%d-%m-%Y’), ‘%d-%m-%Y’) as holiday_date,
if(weekday(date_add(@day_plus, interval @count_x day)) in(5,6),1,0) weekday_holiday,
part_time_date,hos_guid,hos_guid_ext,short_name
from holiday limit 365

ดึงตาราง holiday มา limit แค่ 365 record พอ แต่ไม่ได้เอาข้อมูลมาใช้ ดึงมาเป็น record จำลองเท่านั้น
แล้วสร้างตัวแปรมาคำนวณ
คือ
set @count_x = -1;
set @start_day = ‘2019-01-01′;
set @end_day = date_add(@start_day, interval 1 year);
set @count_day = datediff(@end_day, @start_day);
set @day_plus = @start_day;

ก็จะได้วันที่เริ่มต้นคือ @start_day คือวันที่ที่เราจะให้มันเริ่มคำนวณ
และวันที่สิ้นสุด @end_day คือ บวกไปอีก 1 ปี
แล้วสั่งให้ @count_x := @count_x+1  บวกไปเรื่อยๆ  หากว่า @count_x ยังน้อยกว่า @count_day  อยู่

แล้วหาวันที่หยุดจริงๆ ในวันที่ แต่ละ record
คือ str_to_date(date_format(date_add(@day_plus, interval @count_x day),’%d-%m-%Y’), ‘%d-%m-%Y’) as holiday_date    ก็จะได้วันหยุดของแต่ละวัน

แล้วมาเช็คว่าเป็นวันหยุด จริงหรือไม่ โดยใช้ เงื่อนไขช่วย คือ
if(weekday(date_add(@day_plus, interval @count_x day)) in(5,6),1,0) weekday_holiday
หากค่าที่ได้คือ 1 คือวันหยุดเสาร์และอาทิตย์  ถ้าเป็น  0 คือไม่ใช่    ก็จะทราบได้

ส่วนที่ 2 กรองเอาเฉพาะวันหยุด เท่านั้น
คือ

set @count_x = -1;
set @start_day = ‘2019-01-01′;
set @end_day = date_add(@start_day, interval 1 year);
set @count_day = datediff(@end_day, @start_day);
set @day_plus = @start_day;

select weekday_holiday,holiday_date,if(weekday(holiday_date)=5,’วันเสาร์’,’วันอาทิตย์’) as day_name,
part_time_date,hos_guid,hos_guid_ext,short_name
from (select @start_day , @end_day,
if(@count_x < @count_day , @count_x := @count_x+1,0) as xxx,
str_to_date(date_format(date_add(@day_plus, interval @count_x day),’%d-%m-%Y’), ‘%d-%m-%Y’) as holiday_date,
if(weekday(date_add(@day_plus, interval @count_x day)) in(5,6),1,0) weekday_holiday,
part_time_date,hos_guid,hos_guid_ext,short_name
from holiday limit 365
) day_holiday
where weekday_holiday=1

เอามารวมกัน ก็จะได้เงื่อนไขคือ  where weekday_holiday=1  เอาเฉพาะวันหยุดที่ เท่ากับ 1  ก็จะได้ข้อมูลครับ

พอได้ข้อมูลแล้ว จะนำเข้าไปยังตาราง holiday ยังไง อ้า….เดี่ยวมาต่อในบทความต่อไปละกันนะครับ
เริ่มยาวแล้ว

หากท่านชอบบทความนี้ กด Like กดแชร์ ด้วยนะครับ
แล้วพบกันใหม่ในบทความต่อไปครับ  ขอบคุณครับ

Loading

1 thought on “SQL Tip แจกวันหยุดปีพ.ศ. 2562 พร้อมโค้ด SQL หาวันหยุด

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.