ฟังก์ชัน MySQL NOW() อธิบาย: ไวยากรณ์, ตัวอย่าง, และความแตกต่างจาก SYSDATE()

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() ขึ้นอยู่กับการตั้งค่าโซนเวลา มันอาจคืนค่าที่แตกต่างกันขึ้นอยู่กับการกำหนดค่าของระบบ ในแอปพลิเคชันระดับโลก การออกแบบโดยคำนึงถึงโซนเวลานั้นเป็นสิ่งจำเป็น.