การหาวันเริ่มต้นและวันสุดท้ายของเดือนปัจจุบัน

การหาวันเริ่มต้นและวันสุดท้ายของเดือนปัจจุบัน
บทความนี้ผู้เขียนขอเรียกเป็น “ซีรีย์คิวรี่ตามคำขอ” เพราะผู้เขียนได้รับการสอบถามถึงการสืบค้นวันสุดท้ายของเดือนปัจจุบัน ทั้งที่ Microsoft SQL Server นั้นมีฟังก์ชั่น EOMONTH (End of Month) มาตั้งแต่เวอร์ชั่น 2012 ตามลิ้งก์ต่อไปนี้ https://docs.microsoft.com/en-us/sql/t-sql/functions/eomonth-transact-sql?view=sql-server-2017
ฟังก์ชัน EOMONTH
มี Syntax ต่อไปนี้
โดย start_date คือวันใดก็ได้ในเดือนที่ต้องการหาวันสุดท้ายของเดือน และ month_to_add คือ เลขจำนวนเดือนที่ต้องการบวกเพิ่มให้แก่ start_date
สามารถทำความเข้าใจได้ผ่านตัวอย่างต่อไปนี้
EOMONTH ( start_date [, month_to_add ] ) |
โดย start_date คือวันใดก็ได้ในเดือนที่ต้องการหาวันสุดท้ายของเดือน และ month_to_add คือ เลขจำนวนเดือนที่ต้องการบวกเพิ่มให้แก่ start_date
สามารถทำความเข้าใจได้ผ่านตัวอย่างต่อไปนี้
SET NOCOUNT ON; DECLARE @myDate date=GETDATE(); SELECT @myDate as Today; SELECT EOMONTH(@myDate,-1) as [End of last Month]; SELECT EOMONTH(@myDate) as [End of this Month]; SELECT EOMONTH(@myDate,1) as [End of next Month]; |
ผลลัพธ์ที่ได้คือ (หมายเหตุ วันที่ทำการทดสอบคือ 29 มิถุนายน 2562)
Today ---------- 2019-06-29 End of last Month ----------------- 2019-05-31 End of this Month ----------------- 2019-06-30 End of next Month ----------------- 2019-07-31 |
ไม่ยากเลยใช่ไหมครับ แต่ผู้เขียนอดสงสัยไม่ได้ว่า Microsoft เตรียมฟังก์ชัน EOMONTH ไว้ให้ แต่ทำไมถึงไม่มี BOMONTH (Begin of Month) มาให้บ้าง ผู้เขียนมักสร้างฟังก์ชัน BOMONTH ขึ้นมาใช้งานและอยากจะนำมาแบ่งปันให้ใช้งานกัน
ฟังก์ชัน BOMONTH
แนวคิดง่ายมากครับ ผู้เขียนจะทำการลดจากวันที่ป้อนลงไปหนึ่งเดือน แล้วทำการหา EOMONTH จากวันดังกล่าวจากนั้นบวกวันเพิ่มไปอีก 1 วันก็จะกลายเป็นวันแรกของเดือนจากวันที่ป้อน ดังนี้
เรามาทดสอบฟังก์ชันที่เขียนขึ้นเองดังสคริปต์ต่อไปนี้
ALTER FUNCTION dbo.BOMONTH(@start_date date,@month_to_add int=0) RETURNS date AS BEGIN DECLARE @result date SELECT @result=DATEADD(DAY,1,EOMONTH(@start_date,@month_to_add-1)) RETURN @result END |
เรามาทดสอบฟังก์ชันที่เขียนขึ้นเองดังสคริปต์ต่อไปนี้
SET NOCOUNT ON; DECLARE @myDate date=GETDATE(); SELECT @myDate as Today; SELECT dbo.BOMONTH(@myDate,-1) as [Begin of last Month]; SELECT dbo.BOMONTH(@myDate,DEFAULT) as [Begin of this Month]; SELECT dbo.BOMONTH(@myDate,1) as [Begin of next Month]; |
ผลลัพธ์ที่ได้ (หมายเหตุ วันที่ทำการทดสอบคือ 29 มิถุนายน 2562)
Today ---------- 2019-06-29 Begin of last Month ------------------- 2019-05-01 Begin of this Month ------------------- 2019-06-01 Begin of next Month ------------------- 2019-07-01 |
บทความนี้น่าจะเป็นประโยชน์สำหรับใครที่ต้องการหาวันแรกและวันสุดท้ายของเดือนผ่านฟังก์ชันของ Microsoft SQL Server แล้วผู้เขียนจะรอคำถามต่อไป แล้วนำมาเขียนคิวรี่ให้ดูกันครับ