目次
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
มาดูตัวอย่างการใช้พื้นฐานเพื่อดึงวันที่และเวลาปัจจุบันด้วยฟังก์ชัน NOWSELECT 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()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() แทน