มีน้องๆ 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 กดแชร์ ด้วยนะครับ
แล้วพบกันใหม่ในบทความต่อไปครับ  ขอบคุณครับ

 5,899 total views,  4 views today

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

ใส่ความเห็น

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

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