วันนี้มีแนวคิดเล็กๆ ที่ต้องการแชร์เพื่อนำไปต่อยอดสู่งานใหญ่ต่อไป โจทย์ในวันนี้ คือ การนับจำนวนวันทำการที่ไม่รวมวันเสาร์-อาทิตย์และวันหยุดนักขัตฤกษ์ ฟังก์ชันที่นำมาใช้ ได้แก่
TO_CHAR คือ ฟังก์ชันที่ทำหน้าที่แปลงข้อมูลที่อยู่ในรูปแบบของตัวเลขหรือวันที่ให้เป็นข้อมูลตัวอักษร โดยมี Syntax ดังนี้
TO_CHAR (value [, format_mask] [, nls_language]) |
พารามิเตอร์ที่เกี่ยวข้องกับฟังก์ขัน TO_CHART คือ
value คือ ข้อมูลที่อยู่ในรูปแบบตัวเลขหรือวันที่ที่ต้องการแปลงเป็นตัวอักษร (ค่าที่ต้องระบุ)
format_mask คือ รูปแบบที่สามารถกำหนดให้แสดงผลในการแปลงค่าตัวอักษร (ระบุเพิ่มเติมได้)
nls_language คือ nls language ที่ใช้ในการแปลงค่าเป็นตัวอักษร (ระบุเพิ่มเติมได้)
ตัวอย่างการเรียกใช้ฟังก์ชัน TO_CHAR
ROWNUM Pseudocolumn เป็นคำสั่งที่บอกลำดับของแถว (Row) ของข้อมูล โดยนับจำนวนแถวตามเงื่อนไขทั้งหมดของ SQL statement และแสดงตัวเลขที่ระบุลำดับที่ของแถว โดยแถวแรกจะมีค่าเป็น 1
ตัวอย่าง SQL statement การใช้ ROWNUM
NLS_TERRITORY คือ พารามิเตอร์ของฐานข้อมูลที่กำหนดลำดับวันที่เริ่มต้นของสัปดาห์ ยกตัวอย่าง เช่น
NLS_TERRITORY | First Day of the Week |
NLS_TERRITORY = “GERMANY” | Monday = 1, Tuesday = 2, Sunday = 7 |
NLS_TERRITORY = “AMERICA” | Sunday = 1, Monday = 2, Saturday = 7 |
เริ่มนับจำนวนวันทำการที่ไม่รวมวันเสาร์-อาทิตย์และวันหยุดนักขัตฤกษ์กัน
ตารางวันหยุด (HOLIDAY) มีโครงสร้าง ดังนี้
Name | Datatype | PK | Comments |
HOLIDAYDATE | DATE | Y | วันหยุด |
HOLIDAY_NAME | VARCHAR2(100) | N | ชื่อวันหยุด |
จากนั้นเลือกตารางที่มีข้อมูลที่สามารถสร้างช่วงของวันที่ได้ ผู้เขียนเลือกตาราง Department ซึ่งมีจำนวนข้อมูล 502 rows
ตัวอย่างช่วงของวันที่ที่ต้องการหาจำนวนวันทำการ คือ วันจันทร์ที่ 11 เมษายน 2565 – วันจันทร์ที่ 18 เมษายน 2565
1. หาช่วงขอวันทั้งหมด โดยนำวันที่เริ่มต้น + ROWNUM -1 และตัดเฉพาะช่วงของวันที่ที่ต้องการ
2. หักวันเสาร์-อาทิตย์และวันหยุดนักขัตฤกษ์ออก จากรูปก่อนหน้าวันเสาร์-วันอาทิตย์มีค่า 7 และ 1 ตามลำดับ เป็นไปตามค่าพารามิเตอร์ที่กำหนดไว้ใน NLS_TERRITORY โดยเขียน SQL statement ได้ดังนี้
เมื่อ Run คำสั่งก็จะได้ผลลัพธ์เป็นจำนวนวันทำการทั้งหมด 3 วันดังรูปนั่นเอง เริ่มจากเรียนรู้คำสั่งและฝึกกับโจทย์บ่อยๆ ก็จะได้วิธีการที่หลากหลาย ค่อยๆ เรียนรู้ไปด้วยกันน้า
อ้างอิง
https://www.techonthenet.com/oracle/functions/to_char.php
https://docs.oracle.com/cd/B19306_01/server.102/b14225/ch3globenv.htm