ฟังก์ชั่นง่ายๆเกี่ยวกับเวลาใน MySQL
วันนี้ผมจะมาพูดถึงฟังก์ชั่นง่ายๆที่มีให้ใช้ใน MySQL กันบ้าง หลังจากที่ไม่ได้เขียน Blog แบบที่มาสาระมานาน วันนี้ขอเขียนหน่อย พอดีเอามาใช้กับเว็บ และ เห็นมีน้องๆและเพื่อนๆหลายๆคนถามผมมาว่า “พี่แม็คขอไอเดียการทำแบบนี้ให้หน่อยสิ” ก็เลยจัดไป
จะว่าไปฟังก์ชั่นที่ผมจะพูดถึงนี้มันก็เป็นฟังก์ชั่นมาตรฐานใน MySQL นี่แหล่ะ แต่บางคนอาจจะไม่เคยทำ แต่ไปใช้การคำนวนในรูปแบบอื่นๆแทน ซึ่งคำสั่งพวกนี้ไปหาอ่านกันได้เพิ่มเติมใน MySQL Manual ได้ครับ
ไอเดียที่มีคนถามผมมาก็คือ
- ไอเดียในการกำหนดวัน เวลา ในการแสดงข่าวสาร
- ไอเดียในการกำหนดวันหมดอายุของแบนเนอร์ต่างๆ
สมัยก่อนตอนที่ผมเขียน PHP แบบมั่วๆในแบบของผมเอง ผมก็มักจะใช้วิธีการคำนวนจากค่า TIMESTAMP แล้วเอาไปบวก ไปลบ ค่าของวินาทีต่างๆ เพื่อให้ได้ผลลัพธ์ตามที่ผมต้องการ แต่เมื่อเริ่มใช้ PHP ไปนานๆเข้าก็ได้เห็นจากใน Manual ของ MySQL ในการใช้คำสั่งในการ Query ข้อมูลเพื่อให้ได้ผลลัพธ์ในแบบที่เราต้องการ ทำให้เขียนโค๊ดได้ไวขึ้น และ แม่นยำมากยิ่งขึ้น
มาดูอันดับแรกเลยก็คือ ฟังก์ชั่นในการหาผลต่างของวันนะครับ ก็เลือกใช้ตัวนี้เลย
DATEDIFF(expr1,expr2)
โดยที่ expr1 ก็คือ ค่าวันเวลาช่วงที่ 1 และ expr2 ก็คือช่วงเวลาที่ 2 เพื่อหาความต่างของเวลา มาลองดูตัวอย่างดีกว่า
SELECT DATEDIFF(’1997-12-31 23:59:59′,’1997-12-30′);
ก็จะได้ผลต่างของเวลาทั้งสองเท่ากับ 1 วัน
SELECT DATEDIFF(’1997-11-30 23:59:59′,’1997-12-31′);
ก็จะได้ผลต่างของเวลาทั้งสองเท่ากับ -31 วันครับ
นำมาประยุกต์กับการใช้งานอะไร?? ก็เอามานับจำนวนวันของข้อมูลได้ เช่น กระทู้นี้ลงประกาศมากี่วันแล้ว

มาดูฟังก์ชั่นต่อไปที่อยู่ในคำถามที่มีคนถามไอเดียเกี่ยวกับว่าจะกำหนดวันที่แสดงข่าว หรือ วันหมดอายุของแบนเนอร์ จริงๆแล้วมันง่ายมากมายนัก เอาให้คนที่ไม่รู้ละกันนะครับ ไม่รู้ไอเดียแต่ละคนจะเหมือนกันไหม แต่ไอเดียผมจะเป็นแบบนี้
- กำหนดฟิลล์ขึ้นมา 1 ฟิลล์ในตารางที่เราต้องการกำหนดให้มีการกำหนดวันแสดงผลข่าว เช่นผมกำหนดชื่อฟิลล์ว่า date_show_content ซึ่งผมจะกำหนดให้เป็น DATETIME นะครับ หรือใครจะกำหนดเป็น DATE เฉยๆก็ไม่ว่ากัน
- เวลา Admin เพิ่มข่าวสาร และจะกำหนดวันที่จะแสดงก็อาจจะทำ Javascript ที่เป็นพวกสคริป DateTime Picker มาเลือกวันและเวลาในการลงประกาศ
ซึ่ง 2 ข้อนี้ก็อาจจะง่ายมากในการทำ ซึ่งผมจะไม่พูดถึง แต่สิ่งที่ผมจะพูดถึงก็คือการกำหนดแบบว่ากำหนดจำนวนวันเข้าไป เช่น เราเพิ่มข้อมูลวันนี้ แต่อยากให้มันแสดงผลในอีก 5 วันข้างหน้า เราจะเขียนแบบใด ซึ่งอาจจะเอาไปประยุกต์กับการกำหนดการหมดอายุของแบนเนอร์ได้ว่าให้แบนเนอร์นี้ลงโฆษณาได้ 7 วัน เป็นต้น
DATE_ADD และ DATE_SUB คำสั่งนี้เคยใช้กันบ้างไหม ?
สองฟังก์ชั่นนี้มีประโยชน์มากๆเลยในการหาวันข้างหน้า และ วันย้อนหลัง โดยลักษณะการเรียกใช้จะเป็นแบบนี้
DATE_ADD(date,INTERVAL expr unit)
DATE_SUB(date,INTERVAL expr unit)
DATE_ADD ชื่อก็บอกแล้วว่า ADD นั่นก็คือเอาเพิ่มวันแน่นอน มาดูกันว่าเป็นอย่างไร
SELECT DATE_ADD(’1997-12-31 23:59:59′,INTERVAL 1 SECOND);
ก็จะได้ 1998-01-01 00:00:00
SELECT DATE_ADD(’1997-12-31 23:59:59′,INTERVAL 1 DAY);
ก็จะได้ผลของการเพิ่มวันไป 1 วัน คือ 1998-01-01 23:59:59
DATE_SUB ก็ตรงกันข้ามครับ ก็คือหาวันย้อนหลัง
SELECT DATE_SUB(’1998-01-01 00:00:00′,INTERVAL ‘1 1:1:1′ DAY_SECOND);
ก็คือการหาวันเวลาย้อนหลัง 1 วัน 1 ชั่วโมง 1 นาที 1 วินาที ก็จะได้ผลคือ 1997-12-30 22:58:59
แนวทางในการใช้ของผมก็คือ ผมเอาไปใช้กับระบบสมาชิก VIP ในเว็บผมโดยผู้ลงโฆษณาสามารถเลือกจำนวนวันลงประกาศได้ ว่าจะลงโฆษณากี่วัน แล้วเมื่อครบวันที่กำหนดระบบก็จะไม่แสดงผลรายการโฆษณานั้นๆ ได้ตรงเวลาเปะๆครับ ลองเล่นดูนะครับ ของแบบนี้มันต้องลองเล่นดูครับ ถึงจะเข้าใจนะครับ ขอให้มีความสุขกับการเขียนโปรแกรมครับ





















1 Trackback(s)
You must be logged in to post a comment.