- 1 1. บทนำ
- 2 2. ฟังก์ชัน MySQL เพื่อดึงวันที่/เวลา ปัจจุบัน (ตารางเปรียบเทียบ)
- 3 3. รายละเอียดฟังก์ชัน NOW()
- 4 4. ลักษณะของฟังก์ชัน SYSDATE()
- 5 5. CURTIME() และ CURRENT_TIME()
- 5.1 5.1 CURTIME() คืออะไร?
- 5.2 5.2 CURRENT_TIME() คืออะไร?
- 5.3 5.3 เปรียบเทียบ CURTIME() กับ CURRENT_TIME() (Comparison)
- 5.4 5.4 ตัวอย่างการใช้งานจริงของ CURTIME() / CURRENT_TIME()
- 5.5 5.5 ข้อจำกัดและหมายเหตุสำหรับ CURTIME() / CURRENT_TIME()
- 5.6 5.6 เมื่อใดควรใช้ CURTIME() / CURRENT_TIME()?
- 5.7 5.7 สรุปของ CURTIME() / CURRENT_TIME()
- 6 6. ตัวอย่างการคิวรีเชิงปฏิบัติการโดยใช้เวลาในปัจจุบัน
- 6.1 6.1 บันทึกเวลาในปัจจุบันเมื่อแทรกข้อมูล
- 6.2 6.2 บันทึกเวลาในปัจจุบันเมื่ออัปเดตข้อมูล
- 6.3 6.3 ดึงข้อมูลจาก N วันที่ผ่านมา
- 6.4 6.4 ดึงข้อมูลที่สร้างในช่วงเวลาที่กำหนด
- 6.5 6.5 ดึงเวลาในปัจจุบันโดยคำนึงถึงโซนเวลา
- 6.6 6.6 ตั้งเวลาสร้างบันทึกเป็น timestamp ปัจจุบันโดยค่าเริ่มต้น
- 6.7 6.7 ลบข้อมูลหลังจากระยะเวลาที่กำหนด
- 6.8 6.8 ดึงเวลาในปัจจุบันด้วยความแม่นยำระดับมิลลิวินาที (ไมโครวินาที)
- 6.9 6.9 คู่มือการเลือกกรณีการใช้งาน
- 6.10 6.10 สรุป
- 7 7. คำถามที่พบบ่อย (FAQ)
- 7.1 7.1 ความแตกต่างระหว่าง NOW() และ SYSDATE() คืออะไร?
- 7.2 7.2 CURRENT_TIMESTAMP() และ NOW() เหมือนกันหรือไม่?
- 7.3 7.3 ฉันจะรับเวลาปัจจุบันในเขตเวลาที่กำหนดได้อย่างไร?
- 7.4 7.4 ฉันจะบันทึกเวลาปัจจุบันโดยอัตโนมัติได้อย่างไร?
- 7.5 7.5 ฉันจะดึงข้อมูลจาก N วันที่ผ่านมาได้อย่างไร?
- 7.6 7.6 ฉันจะรับเวลาปัจจุบันด้วยความแม่นยำระดับมิลลิวินาที (ไมโครวินาที) ได้อย่างไร?
- 7.7 7.7 Summary
- 8 8. Summary
1. บทนำ
การดึงเวลาปัจจุบันใน MySQL เป็นส่วนสำคัญของการจัดการฐานข้อมูล
ตัวอย่างเช่น คุณอาจต้องดึงเวลาปัจจุบันในสถานการณ์ต่อไปนี้
- บันทึกเวลาสร้างอัตโนมัติเมื่อแทรกข้อมูล (เช่น เวลาที่ผู้ใช้ใหม่สมัครสมาชิก)
- บันทึกเวลาการเข้าสู่ระบบของผู้ใช้ (เช่น การจัดการประวัติการเข้าสู่ระบบ)
- ดึงข้อมูลในช่วงเวลาที่กำหนด (เช่น การดึงประวัติการสั่งซื้อจาก 24 ชั่วโมงที่ผ่านมา)
- บันทึกล็อกการทำงานของระบบ (เช่น การจัดการล็อกข้อผิดพลาดและล็อกเหตุการณ์)
ดังที่เห็น การดึง “เวลาปัจจุบัน” อย่างถูกต้องสำหรับการจัดการข้อมูลและการบันทึกล็อกเป็นสิ่งจำเป็นสำหรับการดำเนินงานของฐานข้อมูล
ในบทความนี้ เราจะอธิบาย วิธีดึงเวลาปัจจุบันใน MySQL อย่างละเอียดโดยใช้ตัวอย่างคำสั่ง SQL จริง
เราจะครอบคลุมความแตกต่างระหว่างฟังก์ชันที่ใช้บ่อย วิธีเลือกใช้ให้เหมาะสม และตัวอย่างคำสั่งที่ใช้งานได้จริง—เหมาะสำหรับผู้เริ่มต้นจนถึงผู้ใช้ระดับกลาง
2. ฟังก์ชัน MySQL เพื่อดึงวันที่/เวลา ปัจจุบัน (ตารางเปรียบเทียบ)
MySQL มีฟังก์ชันหลายแบบสำหรับดึงเวลาปัจจุบัน
การเลือกฟังก์ชันที่เหมาะสมกับกรณีการใช้งานของคุณเป็นสิ่งสำคัญ แต่หลายคนมักสับสนกับความแตกต่างเหล่านี้
ในส่วนนี้ เราจะเปรียบเทียบ ฟังก์ชันหลัก ที่ใช้ดึงวันที่/เวลาใน MySQL และอธิบายลักษณะของแต่ละฟังก์ชันอย่างละเอียด
2.1 ตารางเปรียบเทียบฟังก์ชันเวลา MySQL
| Function | What it returns | Format | Notes |
|---|---|---|---|
| NOW() | Current date and time | YYYY-MM-DD HH:MM:SS | Most commonly used |
| SYSDATE() | Date and time at execution | YYYY-MM-DD HH:MM:SS | Unlike NOW(), it can change on each execution |
| CURTIME() | Current time | HH:MM:SS | Time only (no date) |
| CURRENT_TIME() | Current time | HH:MM:SS | Same as CURTIME() |
| CURRENT_TIMESTAMP() | Current date and time | YYYY-MM-DD HH:MM:SS | Almost the same as NOW() |
| UTC_TIMESTAMP() | Current UTC date and time | YYYY-MM-DD HH:MM:SS | Time zone is fixed to UTC |
จากตารางข้างต้น ฟังก์ชันส่วนใหญ่จะคืนค่า “วันที่และเวลาปัจจุบัน” หรือ “เวลาเพียงอย่างเดียว” แต่ ฟังก์ชันที่ดีที่สุดขึ้นอยู่กับวัตถุประสงค์ของคุณ
2.2 ภาพรวมและลักษณะของแต่ละฟังก์ชัน
ฟังก์ชัน NOW()
- ฟังก์ชันที่ใช้บ่อยที่สุดสำหรับดึงวันที่และเวลาปัจจุบัน
- คืนค่าเวลาตอนที่คำสั่ง SQL เริ่มทำงาน
- มักใช้สำหรับบันทึกเวลาเมื่อต้องแทรกหรืออัปเดตข้อมูล
SELECT NOW();
ตัวอย่างผลลัพธ์
2025-02-14 15:30:45
ฟังก์ชัน SYSDATE()
- ดึงเวลาปัจจุบัน ณ ขณะทำงาน
- แตกต่างจาก NOW() ที่ SYSDATE() อาจคืนค่าที่ต่างกันทุกครั้งที่ประเมิน (อาจเปลี่ยนแปลงได้แม้ในระหว่าง transaction)
SELECT SYSDATE();
ตัวอย่างผลลัพธ์
2025-02-14 15:30:47
ฟังก์ชัน CURTIME()
- ดึงเฉพาะเวลา (HH:MM:SS)
- มีประโยชน์เมื่อไม่ต้องการวันที่
SELECT CURTIME();
ตัวอย่างผลลัพธ์
15:30:45
ฟังก์ชัน CURRENT_TIME()
- ทำงานเช่นเดียวกับ CURTIME()
- ชื่อฟังก์ชันสอดคล้องกับมาตรฐาน SQL
SELECT CURRENT_TIME();
ตัวอย่างผลลัพธ์
15:30:45
ฟังก์ชัน CURRENT_TIMESTAMP()
- ทำงานเช่น NOW()
- สามารถระบุเป็นค่า
DEFAULTของคอลัมน์ (มักเหมาะสมกว่าNOW()สำหรับค่าเริ่มต้น)SELECT CURRENT_TIMESTAMP();
ตัวอย่างผลลัพธ์
2025-02-14 15:30:45
ตั้งเป็นค่าเริ่มต้นเมื่อสร้างตาราง:
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ฟังก์ชัน UTC_TIMESTAMP()
- ดึงเวลาปัจจุบันแบบ UTC (Coordinated Universal Time)
- ไม่ขึ้นกับโซนเวลาเซิร์ฟเวอร์ ทำให้ได้เวลาที่สอดคล้องกันทั่วโลก
SELECT UTC_TIMESTAMP();
ตัวอย่างผลลัพธ์
2025-02-14 06:30:45
2.3 ควรใช้ฟังก์ชันใด?
| Use case | Recommended function |
|---|---|
| Get the current date and time | NOW() |
| Get a different timestamp each time within a transaction | SYSDATE() |
| Need only the current time (HH:MM:SS) | CURTIME() or CURRENT_TIME() |
| Set as a table default value | CURRENT_TIMESTAMP() |
| Get UTC time | UTC_TIMESTAMP() |
โดยทั่วไป สำหรับการดึงวันที่/เวลาแบบทั่วไป NOW() มักเป็นตัวเลือกที่เหมาะสม
อย่างไรก็ตาม การเลือกฟังก์ชันที่ดีที่สุดตามกรณีการใช้งานของคุณจะทำให้การดำเนินงานข้อมูลมีความยืดหยุ่นและเชื่อถือได้มากขึ้น
3. รายละเอียดฟังก์ชัน NOW()
ฟังก์ชัน NOW() ของ MySQL เป็นฟังก์ชันที่ใช้บ่อยที่สุดสำหรับดึงวันที่และเวลาปัจจุบัน (date + time)
มันถูกใช้อย่างกว้างขวางสำหรับการเก็บค่า timestamp ในฐานข้อมูลและการดึงข้อมูลในช่วงเวลาที่กำหนด
3.1 การใช้งานพื้นฐานของ NOW()
ไวยากรณ์ของ NOW()
SELECT NOW();
ตัวอย่างผลลัพธ์
2025-02-14 15:30:45
- รูปแบบการแสดงผลคือ
YYYY-MM-DD HH:MM:SS(ปี-เดือน-วัน ชั่วโมง:นาที:วินาที) - เวลาได้รับมาจากการตั้งค่าโซนเวลาเริ่มต้นของ MySQL
3.2 การใช้งานทั่วไปของ NOW()
① บันทึกเวลาปัจจุบันเมื่อทำการแทรกข้อมูล
เมื่อทำการแทรกข้อมูลลงในฐานข้อมูล คุณสามารถใช้ NOW() เพื่อบันทึกเวลาสร้างของแถวได้
INSERT INTO users (name, created_at) VALUES ('Sato', NOW());
② บันทึกเวลาปัจจุบันเมื่อทำการอัปเดตข้อมูล
UPDATE users SET last_login = NOW() WHERE id = 1;
③ ดึงข้อมูลจากช่วงเวลาที่กำหนด
SELECT * FROM orders WHERE order_date >= NOW() - INTERVAL 1 DAY;
- โดยระบุ
INTERVAL 1 DAYคุณสามารถดึง “ข้อมูลจาก 1 วันที่ผ่านมา” ได้
3.3 ประเภทค่าที่คืนและวิธีเปลี่ยนรูปแบบการแสดงผล
ประเภทค่าที่คืนของ NOW()
- ชนิด
DATETIME(YYYY-MM-DD HH:MM:SS) - สามารถถือเป็นสตริงได้เช่นกัน
SELECT NOW(), typeof(NOW());
วิธีการเปลี่ยนรูปแบบ
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted_time;
ตัวอย่างผลลัพธ์
2025-02-14 15:30:45
3.4 ความแตกต่างระหว่าง NOW() กับ SYSDATE()
| Function | When it’s evaluated | Notes |
|---|---|---|
| NOW() | At query start | Returns a fixed timestamp for the statement |
| SYSDATE() | At execution time | Can return different timestamps within the same statement |
SELECT NOW(), SLEEP(3), NOW();
SELECT SYSDATE(), SLEEP(3), SYSDATE();
ตัวอย่างผลลัพธ์
NOW() | SLEEP(3) | NOW()
2025-02-14 15:30:45 | wait 3 seconds | 2025-02-14 15:30:45
SYSDATE() | SLEEP(3) | SYSDATE()
2025-02-14 15:30:45 | wait 3 seconds | 2025-02-14 15:30:48
🚨 หากคุณทำงานกับการทำธุรกรรม NOW() แนะนำให้ใช้เพื่อความสอดคล้อง
3.5 ข้อจำกัดและหมายเหตุสำหรับ NOW()
① ขึ้นอยู่กับโซนเวลา
SELECT CONVERT_TZ(NOW(), 'UTC', 'Asia/Tokyo');
② สำหรับค่าตั้งต้นของตาราง ใช้ CURRENT_TIMESTAMP
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
3.6 สรุปของ NOW()
NOW()เป็นฟังก์ชันที่ใช้กันมากที่สุดเพื่อดึงวันที่และเวลาปัจจุบันใน MySQL.- สามารถใช้สำหรับการแทรก, การอัปเดต, และการดึงข้อมูลตามเวลา.
- ใช้
NOW()เมื่อคุณต้องการ timestamp ที่สอดคล้องกันภายในธุรกรรม. SYSDATE()จะคืนค่าเวลาที่แตกต่างกันในแต่ละครั้งที่ประเมิน, ดังนั้นใช้เมื่อคุณต้องการเวลาการดำเนินการที่แม่นยำ.- ใช้
CONVERT_TZ()เพื่อดึงเวลาในโซนเวลาที่ต่างกัน.
📌 สรุป: ในหลาย ๆ กรณี NOW() เป็นตัวเลือกที่ดีที่สุดเพื่อดึงวันที่และเวลาปัจจุบันใน MySQL.

4. ลักษณะของฟังก์ชัน SYSDATE()
ฟังก์ชัน SYSDATE() เป็นอีกวิธีหนึ่งในการดึงวันที่และเวลาปัจจุบันใน MySQL แต่ทำงานแตกต่างจาก NOW().
ในส่วนนี้ เราจะอธิบายการใช้งานพื้นฐานของ SYSDATE(), ความแตกต่างจาก NOW(), และหมายเหตุสำคัญ.
4.1 SYSDATE() คืออะไร?
SYSDATE() เป็นฟังก์ชันที่ คืนค่าเวลาที่ประมวลผลคำสั่ง.
ไม่เหมือน NOW(), มัน คืนค่า timestamp ที่แตกต่างกันทุกครั้งที่ประเมิน.
ไวยากรณ์ของ SYSDATE()
SELECT SYSDATE();
ตัวอย่างผลลัพธ์
2025-02-14 16:00:45
- คืนค่าในรูปแบบ
YYYY-MM-DD HH:MM:SS - แสดง ช่วงเวลาที่คำสั่งถูกดำเนินการ
4.2 ความแตกต่างระหว่าง SYSDATE() กับ NOW()
| Function | When it’s evaluated | Notes |
|---|---|---|
| NOW() | At query start | Returns a fixed timestamp for the statement |
| SYSDATE() | At execution time | Returns a different timestamp each time |
การเปรียบเทียบพฤติกรรม: NOW() vs SYSDATE()
SELECT NOW(), SLEEP(3), NOW();
SELECT SYSDATE(), SLEEP(3), SYSDATE();
ตัวอย่างผลลัพธ์
NOW() | SLEEP(3) | NOW()
2025-02-14 16:00:45 | wait 3 seconds | 2025-02-14 16:00:45
SYSDATE() | SLEEP(3) | SYSDATE()
2025-02-14 16:00:45 | wait 3 seconds | 2025-02-14 16:00:48
📌 ประเด็นสำคัญ
NOW()เก็บ timestamp ตั้งแต่ต้นของคำสั่ง ดังนั้นจะไม่เปลี่ยนแปลง.SYSDATE()คืนค่า timestamp ที่แตกต่างกันทุกครั้งที่ประเมิน ดังนั้นจะเปลี่ยนหลังจาก 3 วินาที.
🚨 ใช้ NOW() สำหรับการประมวลผลธุรกรรม
- เนื่องจาก
SYSDATE()อาจทำงานแตกต่างจากNOW()ใน สภาพแวดล้อมหลายเธรด , จึงแนะนำให้ใช้NOW()เพื่อความสอดคล้องของธุรกรรม.
4.3 ตัวอย่างการใช้ SYSDATE()
① บันทึกเวลาปัจจุบันเมื่อแทรกข้อมูล
INSERT INTO logs (event, created_at) VALUES ('User login', SYSDATE());
② บันทึกเวลาปัจจุบันเมื่ออัปเดตข้อมูล
UPDATE users SET last_login = SYSDATE() WHERE id = 1;
③ รับเวลาปัจจุบันในรูปแบบที่กำหนด
SELECT DATE_FORMAT(SYSDATE(), '%Y-%m-%d %H:%i:%s') AS formatted_time;
ตัวอย่างผลลัพธ์
2025-02-14 16:05:30
4.4 ข้อจำกัดและหมายเหตุสำหรับ SYSDATE()
① พฤติกรรมการทำธุรกรรม
NOW()เก็บค่า timestamp ตั้งแต่เริ่มคำสั่ง , ดังนั้นสามารถใช้ได้อย่างสม่ำเสมอภายในธุรกรรมหนึ่งSYSDATE()คืนค่า timestamp ที่แตกต่างกันทุกครั้ง , ทำให้เกิดการเบี่ยงเบนของเวลาในระหว่างธุรกรรม
② ไม่สามารถใช้เป็นค่า DEFAULT
SYSDATE()ไม่สามารถตั้งเป็นค่าDEFAULTของคอลัมน์ตาราง .
✅ วิธีแก้: ใช้ DEFAULT CURRENT_TIMESTAMP.
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
4.5 เมื่อใดควรใช้ SYSDATE()?
| Use case | Recommended function |
|---|---|
| Typical current timestamp retrieval | NOW() |
| Use a consistent timestamp within a transaction | NOW() |
| Need the exact execution time | SYSDATE() |
🚀 SYSDATE() เหมาะสำหรับการบันทึกแบบเรียลไทม์ แต่ไม่เหมาะกับการประมวลผลธุรกรรม
4.6 สรุป SYSDATE()
- SYSDATE() ดึงค่า timestamp ณ เวลาที่ทำงาน แตกต่างจาก
NOW(). - เนื่องจากสามารถคืนค่าที่แตกต่างกันทุกครั้ง จึงเหมาะกับการบันทึกแบบเรียลไทม์.
- สำหรับความสอดคล้องของธุรกรรม แนะนำให้ใช้
NOW(). - สำหรับค่าเริ่มต้น ให้ใช้
CURRENT_TIMESTAMP.
📌 สรุป: สำหรับการดึง timestamp ทั่วไป NOW() เป็นตัวเลือกที่ดีที่สุด; สำหรับเวลาการทำงานที่แม่นยำ ให้เลือก SYSDATE().
5. CURTIME() และ CURRENT_TIME()
เมื่อคุณต้องการรับเวลาปัจจุบันใน MySQL, CURTIME() และ CURRENT_TIME() จะใช้เมื่อคุณต้องการ เวลาเท่านั้น (HH:MM:SS).
ในส่วนนี้ เราจะอธิบายการใช้งานพื้นฐาน ความแตกต่าง และตัวอย่างการใช้งานจริงของแต่ละฟังก์ชัน.
5.1 CURTIME() คืออะไร?
CURTIME() เป็นฟังก์ชันที่ รับเวลาปัจจุบัน (ชั่วโมง, นาที, วินาที) ใน MySQL.
คุณลักษณะสำคัญคือ ไม่รวมวันที่—คืนค่าเฉพาะส่วนของเวลา.
ไวยากรณ์ CURTIME()
SELECT CURTIME();
ตัวอย่างผลลัพธ์
16:30:45
- รูปแบบ:
HH:MM:SS - ขึ้นอยู่กับการตั้งค่าโซนเวลาของเซิร์ฟเวอร์
- แตกต่างจาก
NOW(), เหมาะเมื่อคุณไม่ต้องการข้อมูลวันที่
5.2 CURRENT_TIME() คืออะไร?
CURRENT_TIME(), เช่นเดียวกับ CURTIME(), เป็นฟังก์ชันที่ รับเวลาปัจจุบัน (HH:MM:SS).
ในทางปฏิบัติ มันทำงาน เหมือนกับ CURTIME() อย่างเต็มที่.
ไวยากรณ์ CURRENT_TIME()
SELECT CURRENT_TIME();
ตัวอย่างผลลัพธ์
16:30:45
📌 ความแตกต่างคืออะไร?
CURTIME()เป็นฟังก์ชันเฉพาะของ MySQLCURRENT_TIME()เป็นมาตรฐาน SQL- ทำงานเหมือนกัน
- เลือกตามความชอบในการอ่าน (ไม่มีความแตกต่างด้านประสิทธิภาพ)
5.3 เปรียบเทียบ CURTIME() กับ CURRENT_TIME() (Comparison)
| Function | What it returns | Format | Notes |
|---|---|---|---|
| CURTIME() | Current time (hour/minute/second) | HH:MM:SS | MySQL-specific function |
| CURRENT_TIME() | Current time (hour/minute/second) | HH:MM:SS | SQL-standard function |
5.4 ตัวอย่างการใช้งานจริงของ CURTIME() / CURRENT_TIME()
① บันทึกเวลาปัจจุบันเมื่อแทรกข้อมูล
INSERT INTO user_logs (event, event_time) VALUES ('Login', CURTIME());
② การกรอง (ดึงข้อมูลในช่วงเวลาที่กำหนด)
SELECT * FROM logs WHERE TIME(created_at) BETWEEN '09:00:00' AND '18:00:00';
③ เปลี่ยนความแม่นยำ (รวมมิลลิวินาที)
SELECT CURTIME(3); -- Display up to 3 fractional digits
ตัวอย่างผลลัพธ์
16:30:45.123
5.5 ข้อจำกัดและหมายเหตุสำหรับ CURTIME() / CURRENT_TIME()
① ไม่มีข้อมูลวันที่ ดังนั้นจึงต้องรวมกับวันที่เมื่อจำเป็น
SELECT CONCAT(CURDATE(), ' ', CURTIME()) AS full_datetime;
② เมื่อใช้เป็นค่า DEFAULT
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event_time TIME DEFAULT CURTIME()
);
5.6 เมื่อใดควรใช้ CURTIME() / CURRENT_TIME()?
| Use case | Recommended function |
|---|---|
| Need only the current time (hour/minute/second) | CURTIME() or CURRENT_TIME() |
| Need current date and time | NOW() |
| Need millisecond precision | CURTIME(3) |
📌 ในส่วนใหญ่, ทั้ง CURTIME() หรือ CURRENT_TIME() ทำงานได้ดี
เลือก whichever you find more readable.
5.7 สรุปของ CURTIME() / CURRENT_TIME()
CURTIME()เป็นฟีเจอร์เฉพาะของ MySQL;CURRENT_TIME()เป็นมาตรฐาน SQL- ทั้งสองคืนค่าเวลาในปัจจุบัน (HH:MM:SS)
- ใช้
CURTIME(3)หรือDATE_FORMAT()เพื่อปรับรูปแบบ/ความแม่นยำ - หากต้องการวันที่, ผสานกับ
CURDATE()หรือใช้NOW() - สำหรับค่าเริ่มต้น,
CURRENT_TIMESTAMPมักจะถูกใช้
📌 สรุป: หากคุณต้องการเพียงเวลาในปัจจุบัน, CURTIME() เป็นตัวเลือกที่ดี.
6. ตัวอย่างการคิวรีเชิงปฏิบัติการโดยใช้เวลาในปัจจุบัน
ตอนนี้คุณเข้าใจวิธีดึงเวลาในปัจจุบันจาก MySQL แล้ว, มาดูวิธีการใช้งานเชิงปฏิบัติ.
ในส่วนนี้, เราจะนำเสนอ ตัวอย่างคิวรีในโลกจริงที่ใช้เวลาในปัจจุบัน.
คุณจะได้เรียนรู้เทคนิคที่เป็นประโยชน์สำหรับงานฐานข้อมูลประจำวัน เช่น การแทรก, การอัปเดต, และการค้นหา.
6.1 บันทึกเวลาในปัจจุบันเมื่อแทรกข้อมูล
① บันทึกเวลาในปัจจุบันเมื่อผู้ใช้ลงทะเบียน
INSERT INTO users (name, email, created_at)
VALUES ('Sato', 'sato@example.com', NOW());
6.2 บันทึกเวลาในปัจจุบันเมื่ออัปเดตข้อมูล
② บันทึกเวลาการเข้าสู่ระบบครั้งล่าสุดของผู้ใช้
UPDATE users SET last_login = NOW() WHERE id = 1;
6.3 ดึงข้อมูลจาก N วันที่ผ่านมา
③ ดึงข้อมูลคำสั่งซื้อจาก 7 วันที่ผ่านมา
SELECT * FROM orders WHERE order_date >= NOW() - INTERVAL 7 DAY;
6.4 ดึงข้อมูลที่สร้างในช่วงเวลาที่กำหนด
④ ดึงข้อมูลที่สร้างวันนี้ระหว่าง 9:00 น. ถึง 18:00 น.
SELECT * FROM logs WHERE TIME(created_at) BETWEEN '09:00:00' AND '18:00:00';
6.5 ดึงเวลาในปัจจุบันโดยคำนึงถึงโซนเวลา
⑤ แปลงเวลา UTC เป็นเวลาในญี่ปุ่น (JST)
SELECT CONVERT_TZ(NOW(), 'UTC', 'Asia/Tokyo');
6.6 ตั้งเวลาสร้างบันทึกเป็น timestamp ปัจจุบันโดยค่าเริ่มต้น
⑥ ตั้งค่า created_at ให้เป็น timestamp ปัจจุบันโดยอัตโนมัติ
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
6.7 ลบข้อมูลหลังจากระยะเวลาที่กำหนด
⑦ ลบข้อมูลที่เก่ากว่า 30 วัน
DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;
6.8 ดึงเวลาในปัจจุบันด้วยความแม่นยำระดับมิลลิวินาที (ไมโครวินาที)
⑧ ดึง timestamp ปัจจุบันด้วยความแม่นยำระดับมิลลิวินาที
SELECT NOW(3);
ตัวอย่างผลลัพธ์
2025-02-14 16:30:45.123
6.9 คู่มือการเลือกกรณีการใช้งาน
| Use case | Recommended function | Example |
|---|---|---|
| Record the current time when inserting data | NOW() | INSERT INTO users (name, created_at) VALUES ('Sato', NOW()); |
| Record the current time when updating data | NOW() | UPDATE users SET last_login = NOW() WHERE id = 1; |
| Retrieve data from the past N days | NOW() - INTERVAL X DAY | SELECT * FROM orders WHERE order_date >= NOW() - INTERVAL 7 DAY; |
| Retrieve data within a specific time range | CURTIME() | SELECT * FROM logs WHERE TIME(created_at) BETWEEN '09:00:00' AND '18:00:00'; |
| Convert UTC time to JST | CONVERT_TZ() | SELECT CONVERT_TZ(NOW(), 'UTC', 'Asia/Tokyo'); |
| Delete old data (older than 30 days) | NOW() - INTERVAL X DAY | DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY; |
6.10 สรุป
NOW()จัดการการดึง timestamp ปัจจุบันพื้นฐานCURTIME()และCURRENT_TIME()มีประโยชน์เมื่อคุณต้องการเพียงเวลาเท่านั้น- คุณสามารถใช้เวลาในปัจจุบันสำหรับคิวรีช่วงเวลา, การกรองตามช่วงเวลาของวัน, และ timestamp ที่มีความแม่นยำระดับมิลลิวินาที
- เนื่องจาก timestamp ขึ้นกับโซนเวลา, ใช้
CONVERT_TZ()เพื่อให้ได้เวลาที่ถูกต้อง - สำหรับการจัดการขนาดฐานข้อมูล, การออกแบบกลไกเพื่อลบข้อมูลเก่าโดยอัตโนมัติก็สำคัญเช่นกัน
📌 สรุป: การใช้เวลาในปัจจุบันอย่างมีประสิทธิภาพช่วยให้คุณจัดการข้อมูลได้อย่างมีประสิทธิภาพมากขึ้นใน MySQL.
7. คำถามที่พบบ่อย (FAQ)
นี่คือ คำถามที่พบบ่อย (FAQ) เกี่ยวกับวิธีดึงเวลาในปัจจุบันจาก MySQL.
แต่ละคำถามได้รับการตอบอย่างชัดเจนและกระชับ.
7.1 ความแตกต่างระหว่าง NOW() และ SYSDATE() คืออะไร?
คำตอบ
ทั้ง NOW() และ SYSDATE() ดึงวันที่และเวลาปัจจุบัน, แต่แตกต่างกันใน เวลาที่ค่าถูกประเมิน.
| Function | When it’s evaluated | Notes |
|---|---|---|
| NOW() | At query start | Returns a fixed timestamp for the statement |
| SYSDATE() | At execution time | Returns a different timestamp on each evaluation |
ตัวอย่างการทดสอบ
SELECT NOW(), SLEEP(3), NOW();
SELECT SYSDATE(), SLEEP(3), SYSDATE();
ตัวอย่างผลลัพธ์
NOW() | SLEEP(3) | NOW()
2025-02-14 16:30:45 | wait 3 seconds | 2025-02-14 16:30:45
SYSDATE() | SLEEP(3) | SYSDATE()
2025-02-14 16:30:45 | wait 3 seconds | 2025-02-14 16:30:48
🚨 สำหรับการประมวลผลธุรกรรม, แนะนำให้ใช้ NOW() เป็นหลัก.
7.2 CURRENT_TIMESTAMP() และ NOW() เหมือนกันหรือไม่?
Answer
พวกมันทำงาน เกือบเหมือนกัน แต่ CURRENT_TIMESTAMP() สามารถใช้เป็นค่า DEFAULT ได้.
Example when creating a table
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
7.3 ฉันจะรับเวลาปัจจุบันในเขตเวลาที่กำหนดได้อย่างไร?
Answer
SELECT CONVERT_TZ(NOW(), 'UTC', 'Asia/Tokyo');
7.4 ฉันจะบันทึกเวลาปัจจุบันโดยอัตโนมัติได้อย่างไร?
Answer
เมื่อสร้างตาราง ให้ระบุ DEFAULT CURRENT_TIMESTAMP เพื่อบันทึกเวลาปัจจุบันโดยอัตโนมัติใน created_at.
CREATE TABLE logs (
id INT AUTO_INCREMENT PRIMARY KEY,
event VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
7.5 ฉันจะดึงข้อมูลจาก N วันที่ผ่านมาได้อย่างไร?
Answer
SELECT * FROM orders WHERE order_date >= NOW() - INTERVAL 7 DAY;
7.6 ฉันจะรับเวลาปัจจุบันด้วยความแม่นยำระดับมิลลิวินาที (ไมโครวินาที) ได้อย่างไร?
Answer
SELECT NOW(3);
Example output
2025-02-14 16:30:45.123
7.7 Summary
NOW()และSYSDATE()แตกต่างกันในเวลาการประเมินค่าCURRENT_TIMESTAMP()สามารถใช้เป็นค่าDEFAULT- ใช้
CONVERT_TZ()เพื่อดึงค่า timestamp ในเขตเวลาอื่น - ใช้
DEFAULT CURRENT_TIMESTAMPเพื่อบันทึก timestamp การสร้างโดยอัตโนมัติ - ใช้
NOW() - INTERVAL X DAYเพื่อดึงข้อมูลจาก X วันที่ผ่านมา NOW(3)หรือNOW(6)รองรับ timestamp ที่มีความแม่นยำระดับมิลลิวินาที/ไมโครวินาที
📌 Conclusion: การเลือกฟังก์ชันเวลา MySQL ที่เหมาะสมเป็นสิ่งสำคัญสำหรับการทำงานกับ timestamp ปัจจุบัน.
8. Summary
ในบทความนี้ เราได้อธิบายวิธีการรับเวลาปัจจุบันใน MySQL.
โดยเน้นที่ ฟังก์ชัน NOW() เราได้ครอบคลุมความแตกต่างระหว่างฟังก์ชันที่คล้ายกัน ตัวอย่างการคิวรีเชิงปฏิบัติ และหมายเหตุสำคัญ.
8.1 ฟังก์ชัน MySQL หลักสำหรับรับเวลาปัจจุบัน
| Function | What it returns | Format | Notes |
|---|---|---|---|
| NOW() | Current date and time | YYYY-MM-DD HH:MM:SS | Most common function |
| SYSDATE() | Date and time at execution | YYYY-MM-DD HH:MM:SS | Can return different values on each evaluation |
| CURTIME() | Current time | HH:MM:SS | Time only (no date) |
| CURRENT_TIME() | Current time | HH:MM:SS | Same as CURTIME() |
| CURRENT_TIMESTAMP() | Current date and time | YYYY-MM-DD HH:MM:SS | Almost the same as NOW() |
| UTC_TIMESTAMP() | Current UTC date and time | YYYY-MM-DD HH:MM:SS | Time zone fixed to UTC |
📌 Conclusion:
- สำหรับการดึง timestamp ปัจจุบันทั่วไป,
NOW()มักจะเป็นตัวเลือกที่ดีที่สุด . - หากคุณต้องการเวลาการดำเนินการที่แม่นยำ, ใช้
SYSDATE(). - หากคุณต้องการเพียงเวลา (ไม่มีวันที่), เลือก
CURTIME().
8.2 คิวรีเชิงปฏิบัติที่ใช้เวลาปัจจุบัน
Record the current time when inserting data
INSERT INTO users (name, created_at) VALUES ('Sato', NOW());
Record the current time when updating data
UPDATE users SET last_login = NOW() WHERE id = 1;
Retrieve data from the past 7 days
SELECT * FROM orders WHERE order_date >= NOW() - INTERVAL 7 DAY;
Retrieve time with time zones in mind
SELECT CONVERT_TZ(NOW(), 'UTC', 'Asia/Tokyo');
Delete old data (older than 30 days)
DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;
8.3 หมายเหตุเกี่ยวกับเขตเวลา
- MySQL
NOW()ขึ้นอยู่กับ การตั้งค่าเขตเวลาเริ่มต้น ดังนั้นผลลัพธ์อาจแตกต่างกันในแต่ละสภาพแวดล้อม. - ใช้
CONVERT_TZ()เพื่อดึงค่า timestamp ในเขตเวลาอื่น. - หากคุณต้องการเปลี่ยนเขตเวลาเซิร์ฟเวอร์:
SET GLOBAL time_zone = 'Asia/Tokyo';
8.4 คำถามที่พบบ่อยเกี่ยวกับฟังก์ชันเวลาปัจจุบันของ MySQL
Q1. ความแตกต่างระหว่าง NOW() และ SYSDATE() คืออะไร?
➡ NOW() ดึงเวลาที่ เริ่มต้นคิวรี, ในขณะที่ SYSDATE() ดึงเวลาที่ ดำเนินการ.
Q2. CURRENT_TIMESTAMP() และ NOW() เหมือนกันหรือไม่?
➡ พวกมัน เกือบเหมือนกัน, แต่ CURRENT_TIMESTAMP() สามารถใช้เป็นค่า DEFAULT.
Q3. ฉันจะรับเวลาปัจจุบันด้วยความแม่นยำระดับมิลลิวินาที (ไมโครวินาที) ได้อย่างไร?
➡ ใช้ NOW(3) (มิลลิวินาที) หรือ NOW(6) (ไมโครวินาที).
SELECT NOW(3); -- Example: 2025-02-14 16:30:45.123
8.5 Summary
- ใน MySQL การเลือกฟังก์ชันที่เหมาะสมสำหรับเวลาปัจจุบันเป็นสิ่งสำคัญ .
- ใช้
NOW()สำหรับกรณีทั่วไป, และSYSDATE()เมื่อคุณต้องการเวลาประมวลผลที่แม่นยำ . - ใช้
CURTIME()สำหรับเวลาเท่านั้น, และCONVERT_TZ()สำหรับการแปลงโซนเวลา . - คุณสามารถใช้เวลาปัจจุบันในการแทรก, อัปเดต, ค้นหา, และลบข้อมูล .
📌 สรุป: เชี่ยวชาญฟังก์ชันเวลาใน MySQL เพื่อจัดการข้อมูลได้อย่างมีประสิทธิภาพมากขึ้น.


