คู่มือฟังก์ชัน NOW ของ MySQL | พื้นฐานถึงการใช้งาน

1. ภาพรวมของฟังก์ชัน NOW ของ MySQL

ฟังก์ชัน NOW ของ MySQL ใช้เพื่อดึงวันที่และเวลาปัจจุบันจากฐานข้อมูลได้อย่างง่ายดาย การใช้ฟังก์ชัน NOW จะช่วยให้คุณสามารถรับข้อมูลเวลาที่ใช้เป็น timestamp เมื่อแทรกข้อมูล หรือข้อมูลเวลาที่เป็นประโยชน์สำหรับการบันทึกล็อก เป็นเครื่องมือที่เรียบง่ายแต่มีประสิทธิภาพสูงและได้รับการใช้อย่างกว้างขวาง

รูปแบบพื้นฐานของฟังก์ชัน NOW

รูปแบบของฟังก์ชัน NOW นั้นเรียบง่ายมาก สามารถดึงวันที่และเวลาปัจจุบันได้ด้วยคิวรีต่อไปนี้
SELECT NOW();
ผลลัพธ์ที่ได้จะถูกส่งกลับในรูปแบบ YYYY-MM-DD HH:MM:SS ตัวอย่างเช่น หากเป็นวันที่ 24 ตุลาคม 2024 เวลา 16:30 จะได้ผลลัพธ์ดังต่อไปนี้
2024-10-24 16:30:00
นอกจากนี้ ฟังก์ชัน NOW จะคืนค่าวันที่และเวลาปัจจุบันตามเขตเวลา (timezone) ของฐานข้อมูล ซึ่งทำให้สามารถจัดการเวลาได้อย่างสอดคล้องทั่วทั้งระบบ

การใช้งานฟังก์ชัน NOW

ฟังก์ชัน NOW มีประโยชน์เป็นพิเศษในสถานการณ์ต่อไปนี้
  • การบันทึกล็อก: บันทึกเวลาเปลี่ยนแปลงหรือแทรกข้อมูลโดยอัตโนมัติ
  • Timestamp: ใช้เพื่อบันทึกเวลาที่ผู้ใช้ทำการกระทำ
  • การกรองตามเวลา: ใช้เมื่อดึงข้อมูลที่เกิดขึ้นในช่วงเวลาที่กำหนด

2. ตัวอย่างการใช้พื้นฐานของฟังก์ชัน NOW

มาดูตัวอย่างการใช้พื้นฐานเพื่อดึงวันที่และเวลาปัจจุบันด้วยฟังก์ชัน NOW
SELECT NOW();
คิวรีนี้จะคืนค่าวันที่และเวลาปัจจุบัน นอกจากการดึงในรูปแบบสตริงแล้ว ยังสามารถดึงในรูปแบบตัวเลขได้ เมื่อใช้คิวรีต่อไปนี้ จะได้วันที่และเวลาปัจจุบันในรูปแบบตัวเลข (YYYYMMDDHHMMSS)
SELECT NOW() + 0;
เช่น ผลลัพธ์จะคืนเป็น “20241024163000” ซึ่งสะดวกเมื่อจัดการในรูปแบบตัวเลข

กำหนดความแม่นยำของเศษส่วนวินาที

ฟังก์ชัน NOW สามารถกำหนดความแม่นยำของเศษส่วนวินาทีได้ กำหนดความแม่นยำโดยใส่ค่าเป็นอาร์กิวเมนต์ตามตัวอย่างต่อไปนี้
SELECT NOW(3);
คิวรีนี้จะคืนผลลัพธ์ที่มีความแม่นยำถึง 3 ตำแหน่งหลังจุดทศนิยม เช่น รูปแบบ “2024-10-24 16:30:00.123” เป็นฟีเจอร์ที่มีประโยชน์อย่างมากสำหรับระบบที่ต้องการความแม่นยำระดับวินาที

3. ความแตกต่างระหว่าง SYSDATE() กับ NOW()

ฟังก์ชัน NOW มีฟังก์ชันที่คล้ายกันคือ SYSDATE() แต่พวกมันทำงานแตกต่างกันเล็กน้อย
  • NOW(): รับเวลาขณะรันคิวรีและเวลานั้นจะคงที่ตลอดคำสั่งทั้งหมด แม้ธุรกรรมจะดำเนินต่อเนื่องเป็นเวลานานก็จะให้ผลลัพธ์เดียวกัน
  • SYSDATE(): รับเวลาตามจุดเวลานั้นในแต่ละขั้นตอนของคิวรี ดังนั้นแม้ในธุรกรรมที่ใช้เวลานานก็จะได้เวลาจริงในขณะนั้น
เช่น ในการประมวลผลแบบแบตช์ที่ทำงานเป็นเวลานาน SYSDATE() จะให้ผลลัพธ์ที่แม่นยำกว่า แต่หากให้ความสำคัญกับความสอดคล้องของธุรกรรม NOW() จะเป็นที่แนะนำ

ตัวอย่างความแตกต่างในคิวรี

ต่อไปนี้คือตัวอย่างคิวรีที่แสดงความแตกต่างของการทำงานระหว่าง SYSDATE() และ NOW()
SELECT NOW(), SYSDATE();
ผลลัพธ์เป็นดังต่อไปนี้
NOW():     2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01
ความแตกต่างของเวลาที่เกิดขึ้นในขณะคิวรีถูกดำเนินการใน SYSDATE() แต่ NOW() จะคงเวลาที่เริ่มรันคิวรีไว้ ดังนั้นแม้ว่าการทำงานของทั้งสองจะต่างกันเล็กน้อย การเลือกฟังก์ชันที่เหมาะสมตามการใช้งานเป็นสิ่งสำคัญ

4. ตัวอย่างการใช้งานฟังก์ชัน NOW

ฟังก์ชัน NOW มีประโยชน์อย่างมากในสถานการณ์บางอย่าง ตัวอย่างเช่น หากต้องการบันทึกวันที่และเวลาที่ข้อมูลถูกแทรกโดยอัตโนมัติ สามารถใช้ฟังก์ชัน NOW ดังนี้
INSERT INTO users (username, created_at) 
VALUES ('example_user', NOW());
ด้วยวิธีนี้ เวลาปัจจุบันจะถูกบันทึกโดยอัตโนมัติในคอลัมน์ created_at เมื่อมีการแทรกเรคคอร์ด ฟังก์ชันนี้เป็นที่นิยมอย่างยิ่งในการบันทึกล็อกและการติดตามเหตุการณ์ นอกจากนี้ หากต้องการดึงข้อมูลที่สร้างในช่วง 7 วันที่ผ่านมา สามารถใช้ฟังก์ชัน NOW ดังนี้
SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;
คิวรีนี้จะดึงเรคคอร์ดทั้งหมดที่สร้างในช่วง 7 วันที่ผ่านมา ตั้งแต่วันที่และเวลาปัจจุบัน ฟังก์ชัน NOW มีประสิทธิภาพอย่างมากในการดึงข้อมูลที่ขึ้นกับเวลา

5. ข้อควรระวังของฟังก์ชัน NOW

เมื่อใช้ฟังก์ชัน NOW มีข้อควรระวังหลายประการ โดยเฉพาะอย่างยิ่งอาจส่งผลต่อความสอดคล้องของธุรกรรม ดังนั้นจึงต้องระมัดระวังบริบทการใช้งาน
  • การทำงานภายในธุรกรรม: ฟังก์ชัน NOW จะคืนค่าที่สอดคล้องกันภายในธุรกรรม ดังนั้นแม้ในระหว่างการประมวลผลที่ใช้เวลานานก็จะได้เวลาเดียวกัน ซึ่งสำคัญต่อการรักษาความสอดคล้องของข้อมูล อย่างไรก็ตาม หากต้องการเวลาจริง ควรใช้ SYSDATE() แทน
นอกจากนี้ ฟังก์ชัน NOW ยังขึ้นกับโซนเวลา จึงอาจให้ผลลัพธ์ที่แตกต่างกันตามการตั้งค่าของระบบ ดังนั้นในแอปพลิเคชันระดับโลก จำเป็นต้องออกแบบโดยคำนึงถึงประเด็นนี้