ตัวอย่างการประยุกต์ใช้งานฟังก์ชัน DateAdd

เราต้องการจะทราบกำหนดการชำระเงิน (duedate) ของลูกค้าแต่ละราย ว่าเป็นวันใด เราต้องหาฟังก์ชันที่มีการคืนค่าออกมาเป็นวันที่ได้ ทั้งนี้ต้องทราบวันที่เริ่มต้น และ จำนวนวันที่ให้เครดิตลูกค้า หากเป็นคำถามลักษณะนี้ บทความนี้จะขอแนะนำให้รู้จักกับฟังก์ชัน DateAdd หากยังไม่เข้าใจคำถาม ลองพิจารณาข้อมูลจากบทความนี้ดู
ตัวอย่างการประยุกต์ใช้งานฟังก์ชัน DateAdd
ทักษะ (ระบุได้หลายทักษะ)

เราต้องการจะทราบกำหนดการชำระเงิน (duedate) ของลูกค้าแต่ละราย ว่าเป็นวันใด เราต้องหาฟังก์ชันที่มีการคืนค่าออกมาเป็นวันที่ได้ ทั้งนี้ต้องทราบวันที่เริ่มต้น และ จำนวนวันที่ให้เครดิตลูกค้า หากเป็นคำถามลักษณะนี้ บทความนี้จะขอแนะนำให้รู้จักกับฟังก์ชัน DateAdd หากยังไม่เข้าใจคำถาม ลองพิจารณาข้อมูลจากบทความนี้ดู

OrderIDCustomerInvoiceDateCreditTermDueDate
10248Wilman Kala15/7/25601530/7/2560
10249Tradição Hipermercados15/7/2560204/8/2560
10250Hanari Carnes15/7/2560259/8/2560
10251Victuailles en stock15/7/25603014/8/2560
10252Suprêmes délices15/7/25606013/9/2560
10253Hanari Carnes15/7/25609013/10/2560

ซึ่งคอลัมน์ DueDate เป็นคอลัมภ์ที่เป็นผลลัพธ์จากฟังก์ชัน DateAdd ค่ะ
ฟิลด์ InvoiceDate นั้น เป็นวันที่วางใบแจ้งหนี้
ฟิลด์ CreditTerm นั้น เป็นจำนวนวันที่ให้เครดิตลูกค้า

ส่วนกำหนดชำระเงิน หรือ DueDate นั้น คือ
วันที่ลูกค้าต้องชำระเงิน หลังจากวันที่วางใบแจ้งหนี้ตามจำนวนวันที่ให้เครดิตลูกค้า 
เช่น CreditTerm 5 วัน  InvoiceDate 15/7/2560   duedate จะเป็นวันที่ 20/7/2560

ซึ่ง Syntax ของ DateAdd คือ  DateAdd(interval, number, date)
โดย Interval หมายถึง ช่วงเวลา  เช่น

ถ้าคำนวณเวลา 30 นาที จากเดี๋ยวนี้ Interval จะเป็น “n”
DateAdd ( “n”, 30, 15/07/2560 15:00)   คืนค่า เป็น 15/07/2560 15:30

ถ้าคำนวณวัน 10 วัน นับจากวันนี้  Interval จะเป็น “d”
DateAdd ( “d”, 10, 15/7/2560)   คืนค่า เป็น 25/7/2560

ทั้งนี้จะสังเกตได้ว่า n  หรือ d  นั้น จะเป็น String Expression จึงต้องอยู่ภายใต้เครื่องหมาย

ส่วนจะทราบได้อย่างไร ว่า เมื่อใดจะใช้  n  เมื่อใดจะใช้ d  นั้น สามารถดูได้เพิ่มเติมนั้น
สามารถดูได้ตามตารางข้างล่างนี้ค่ะ
ทั้งนี้ อ้างอิงจาก https://support.office.com/th-th/article/ฟังก์ชัน-DateAdd-63befdf6-1ffa-4357-9424-61e8c57afc19 ค่ะ

การตั้งค่าคำอธิบาย
yyyyปี
qไตรมาส
mเดือน
yวันของปี
dวัน
wวันทำงาน
wwสัปดาห์
hชั่วโมง
nนาที
sวินาที

เมื่อทราบวิธีการใช้งานฟังก์ชัน DueDate กันแล้ว  กลับมาที่การหา Duedate กันค่ะ 
จาก  Syntax  : DateAdd ( interval, number, date )

ดังนั้น DueDate  =  DateAdd ( “d”, [CreditTerm], [InvoiceDate])

จากตัวอย่างข้างต้นจะเห็นว่า  number เป็นตัวเลขบวก 
ซึ่งในความเป็นจริงแล้ว number นั้นสามารถเป็นตัวเลขติดลบได้

ลองพิจารณาตัวอย่างนี้ดูค่ะ
หากเราต้องการทราบรายการลูกค้าได้หมดอายุมาแล้วไม่เกิน 30 วัน  ทั้งนี้เราจะ Criteria ข้อมูลอย่างไรดี

จากข้อมูลดังตารางก่อนที่จะ Criteria นั้น CurrentDate คือ วันที่ปัจจุบัน
เมื่อพิจารณาที่ ExpireDate จะพบว่า มีทั้งกรณี

  1. หมดอายุเกิน 30 วันไปแล้ว
  2. หมดอายุไม่เกิน 30 วัน  ซึ่งเราต้องการกรณีนี้ โดยถ้าเรา Criteria จะได้ผลลัพธ์ดัง Record ที่เป็นสีเหลือง
  3. ยังไม่หมดอายุ
Customer IDCompany NameExpireDateCurrentDate
ALFKIAlfreds Futterkiste3/7/256030/7/2560
ANATRAna Trujillo Emparedados y helados5/6/256030/7/2560
ANTONAntonio Moreno Taquería31/10/256030/7/2560
AROUTAround the Horn20/7/256030/7/2560
BERGSBerglunds snabbköp30/7/256030/7/2560
BLAUSBlauer See Delikatessen31/12/256030/7/2560
BLONPBlondel père et fils31/3/256130/7/2560

กรณีที่ต้องการเฉพาะ ExpireDate ที่หมดอายุมาแล้วไม่เกิน 30 วัน แสดงว่า
เราต้องการช่วงข้อมูล ตั้งแต่วันที่นับย้อนหลังไป 30 วันนับจากวันนี้ นั่นก็คือ

DateAdd("d",-30,Date()) ถึงวันที่ปัจจุบัน ก็คือ Date()

ดังนั้น คำสั่งที่ใช้ Criteria ที่ฟิลด์ ExpireDate  คือ 
Between DateAdd("d",-30,Date()) And Date()

ลองดูที่ Design View ของ Query นี้กัน

การดู Design View ของ Query

ผลลัพธ์ที่ได้

Customer IDCompany NameExpireDateCurrentDate
ALFKIAlfreds Futterkiste3/7/256030/7/2560
AROUTAround the Horn20/7/256030/7/2560
BERGSBerglunds snabbköp30/7/256030/7/2560


จากทั้ง 2 ตัวอย่างที่ผ่านมา จะเห็นได้ว่า การใช้ฟังก์ชัน DateAdd นั้น 
นอกจากเราสามารถหาวันที่ไปข้างหน้าได้แล้ว เรายังสามารถหาวันที่ย้อนหลังได้อีกด้วยค่ะ
อย่างไรลองนำไปประยุกต์ใช้กับงานในชิวิตจริงกันดูนะคะ