1. ภาพรวมของฟังก์ชัน MySQL NOW()
ฟังก์ชัน MySQL NOW() ใช้เพื่อดึงวันที่และเวลาปัจจุบันภายในฐานข้อมูลได้อย่างง่ายดาย โดยการใช้ฟังก์ชัน NOW() คุณสามารถรับค่า timestamp เมื่อแทรกข้อมูลหรือดึงข้อมูลเวลาเพื่อใช้ในการบันทึกเหตุการณ์ แม้จะเรียบง่าย แต่ก็เป็นเครื่องมือที่มีประสิทธิภาพสูงและได้รับการใช้งานอย่างกว้างขวาง
ไวยากรณ์พื้นฐานของฟังก์ชัน NOW()
ไวยากรณ์ของฟังก์ชัน NOW() นั้นง่ายมาก คุณสามารถดึงวันที่และเวลาปัจจุบันด้วยคำสั่งต่อไปนี้
SELECT NOW();
ผลลัพธ์ที่ได้จะถูกส่งคืนในรูปแบบ YYYY-MM-DD HH:MM:SS ตัวอย่างเช่น หากวันที่และเวลาเป็น 24 ตุลาคม 2024 เวลา 16:30 ผลลัพธ์จะเป็นดังนี้
2024-10-24 16:30:00
ฟังก์ชัน NOW() คืนค่าวันที่และเวลาปัจจุบันตามเขตเวลา (time zone) ของฐานข้อมูล ซึ่งช่วยให้การจัดการเวลาเป็นไปอย่างสอดคล้องทั่วทั้งระบบ
การใช้งานทั่วไปของฟังก์ชัน NOW()
ฟังก์ชัน NOW() มีประโยชน์เป็นพิเศษในสถานการณ์ต่อไปนี้
- Logging : บันทึกเวลาที่ข้อมูลถูกแก้ไขหรือแทรกโดยอัตโนมัติ
- Timestamps : ใช้บันทึกเวลาการกระทำของผู้ใช้
- Time-dependent filtering : การกรองข้อมูลที่เกิดขึ้นในช่วงเวลาที่กำหนด
2. ตัวอย่างการใช้งานพื้นฐานของฟังก์ชัน NOW()
มาดูตัวอย่างพื้นฐานของการดึงวันที่และเวลาปัจจุบันโดยใช้ฟังก์ชัน NOW()
SELECT NOW();
คำสั่งนี้คืนค่าวันที่และเวลาปัจจุบัน นอกจากจะดึงเป็นสตริงแล้ว คุณยังสามารถรับค่าในรูปแบบตัวเลขได้ โดยใช้คำสั่งต่อไปนี้ วันที่และเวลาปัจจุบันจะถูกคืนในรูปแบบตัวเลข (YYYYMMDDHHMMSS)
SELECT NOW() + 0;
ตัวอย่างเช่น ผลลัพธ์อาจถูกคืนเป็น “20241024163000” ซึ่งสะดวกเมื่อต้องจัดการค่าดังกล่าวในรูปแบบตัวเลข
การระบุความแม่นยำของเศษวินาที
ฟังก์ชัน NOW() อนุญาตให้คุณระบุความแม่นยำของเศษวินาที คุณสามารถตั้งค่าความแม่นยำโดยใช้อาร์กิวเมนต์ตามตัวอย่างด้านล่าง
SELECT NOW(3);
คำสั่งนี้คืนค่าที่มีความแม่นยำระดับมิลลิวินาที (สามตำแหน่งหลังจุดทศนิยม) ตัวอย่างเช่น อาจคืนค่าเป็น “2024-10-24 16:30:00.123” ฟีเจอร์นี้มีประโยชน์อย่างยิ่งในระบบที่ต้องการความแม่นยำระดับวินาที
3. ความแตกต่างระหว่าง SYSDATE() และ NOW()
มีฟังก์ชันที่คล้ายกับ NOW() ชื่อ SYSDATE() แต่พวกมันทำงานแตกต่างกันเล็กน้อย
- NOW() : ดึงเวลาที่จุดเริ่มต้นของการดำเนินการคิวรีและคงค่าที่เดียวตลอดคำสั่งทั้งหมด แม้ว่าธุรกรรมจะทำงานเป็นเวลานานก็ยังคืนผลลัพธ์เดียวกัน
- SYSDATE() : ดึงเวลาปัจจุบันในแต่ละขั้นตอนของคิวรี กล่าวคือ แม้ในระหว่างธุรกรรมที่ทำงานเป็นเวลานานก็จะคืนค่าเวลาจริง ณ ขณะนั้น
ตัวอย่างเช่น ในกระบวนการ batch ที่ทำงานเป็นเวลานาน 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 เมื่อแทรกบันทึกลงไป ฟีเจอร์นี้มีคุณค่าเป็นพิเศษสำหรับการบันทึกและการติดตามเหตุการณ์.
นอกจากนี้ หากคุณต้องการดึงข้อมูลที่สร้างขึ้นในช่วงเจ็ดวันที่ผ่านมา คุณสามารถใช้ฟังก์ชัน NOW() ดังต่อไปนี้.
SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;
คิวรีนี้ดึงบันทึกทั้งหมดที่สร้างขึ้นในช่วงเจ็ดวันที่ผ่านมา จากวันที่และเวลาปัจจุบัน ฟังก์ชัน NOW() มีประสิทธิภาพอย่างมากสำหรับการสกัดข้อมูลที่ขึ้นกับเวลา.
5. ข้อควรพิจารณาที่สำคัญเมื่อใช้ฟังก์ชัน NOW()
มีหลายประเด็นสำคัญที่ควรพิจารณาเมื่อใช้ฟังก์ชัน NOW() โดยเฉพาะอย่างยิ่ง มันอาจส่งผลต่อความสอดคล้องของธุรกรรม ดังนั้นจึงสำคัญที่จะใช้มันอย่างเหมาะสมตามบริบท.
- พฤติกรรมภายในธุรกรรม : ฟังก์ชัน NOW() คืนค่าผลลัพธ์ที่สอดคล้องกันภายในธุรกรรม หมายความว่าจะคืนค่า timestamp เดียวกันแม้ในกระบวนการที่ใช้เวลานาน นี่สำคัญสำหรับการรักษาความสอดคล้องของข้อมูล อย่างไรก็ตาม หากต้องการ timestamp แบบเรียลไทม์ การใช้ SYSDATE() จะเหมาะสมกว่า.
นอกจากนี้ เนื่องจากฟังก์ชัน NOW() ขึ้นอยู่กับการตั้งค่าโซนเวลา มันอาจคืนค่าที่แตกต่างกันขึ้นอยู่กับการกำหนดค่าของระบบ ในแอปพลิเคชันระดับโลก การออกแบบโดยคำนึงถึงโซนเวลานั้นเป็นสิ่งจำเป็น.


