Timestamp ปัจจุบันของ MySQL: วิธีดึงวันที่และเวลาปัจจุบัน (NOW, SYSDATE, UTC_TIMESTAMP)

目次

1. บทนำ

การดึงเวลาปัจจุบันใน MySQL เป็นส่วนสำคัญของการจัดการฐานข้อมูล
ตัวอย่างเช่น คุณอาจต้องดึงเวลาปัจจุบันในสถานการณ์ต่อไปนี้

  • บันทึกเวลาสร้างอัตโนมัติเมื่อแทรกข้อมูล (เช่น เวลาที่ผู้ใช้ใหม่สมัครสมาชิก)
  • บันทึกเวลาการเข้าสู่ระบบของผู้ใช้ (เช่น การจัดการประวัติการเข้าสู่ระบบ)
  • ดึงข้อมูลในช่วงเวลาที่กำหนด (เช่น การดึงประวัติการสั่งซื้อจาก 24 ชั่วโมงที่ผ่านมา)
  • บันทึกล็อกการทำงานของระบบ (เช่น การจัดการล็อกข้อผิดพลาดและล็อกเหตุการณ์)

ดังที่เห็น การดึง “เวลาปัจจุบัน” อย่างถูกต้องสำหรับการจัดการข้อมูลและการบันทึกล็อกเป็นสิ่งจำเป็นสำหรับการดำเนินงานของฐานข้อมูล

ในบทความนี้ เราจะอธิบาย วิธีดึงเวลาปัจจุบันใน MySQL อย่างละเอียดโดยใช้ตัวอย่างคำสั่ง SQL จริง
เราจะครอบคลุมความแตกต่างระหว่างฟังก์ชันที่ใช้บ่อย วิธีเลือกใช้ให้เหมาะสม และตัวอย่างคำสั่งที่ใช้งานได้จริง—เหมาะสำหรับผู้เริ่มต้นจนถึงผู้ใช้ระดับกลาง

2. ฟังก์ชัน MySQL เพื่อดึงวันที่/เวลา ปัจจุบัน (ตารางเปรียบเทียบ)

MySQL มีฟังก์ชันหลายแบบสำหรับดึงเวลาปัจจุบัน
การเลือกฟังก์ชันที่เหมาะสมกับกรณีการใช้งานของคุณเป็นสิ่งสำคัญ แต่หลายคนมักสับสนกับความแตกต่างเหล่านี้

ในส่วนนี้ เราจะเปรียบเทียบ ฟังก์ชันหลัก ที่ใช้ดึงวันที่/เวลาใน MySQL และอธิบายลักษณะของแต่ละฟังก์ชันอย่างละเอียด

2.1 ตารางเปรียบเทียบฟังก์ชันเวลา MySQL

FunctionWhat it returnsFormatNotes
NOW()Current date and timeYYYY-MM-DD HH:MM:SSMost commonly used
SYSDATE()Date and time at executionYYYY-MM-DD HH:MM:SSUnlike NOW(), it can change on each execution
CURTIME()Current timeHH:MM:SSTime only (no date)
CURRENT_TIME()Current timeHH:MM:SSSame as CURTIME()
CURRENT_TIMESTAMP()Current date and timeYYYY-MM-DD HH:MM:SSAlmost the same as NOW()
UTC_TIMESTAMP()Current UTC date and timeYYYY-MM-DD HH:MM:SSTime 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 caseRecommended function
Get the current date and timeNOW()
Get a different timestamp each time within a transactionSYSDATE()
Need only the current time (HH:MM:SS)CURTIME() or CURRENT_TIME()
Set as a table default valueCURRENT_TIMESTAMP()
Get UTC timeUTC_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()

FunctionWhen it’s evaluatedNotes
NOW()At query startReturns a fixed timestamp for the statement
SYSDATE()At execution timeCan 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()

FunctionWhen it’s evaluatedNotes
NOW()At query startReturns a fixed timestamp for the statement
SYSDATE()At execution timeReturns 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 caseRecommended function
Typical current timestamp retrievalNOW()
Use a consistent timestamp within a transactionNOW()
Need the exact execution timeSYSDATE()

🚀 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() เป็นฟังก์ชันเฉพาะของ MySQL
  • CURRENT_TIME() เป็นมาตรฐาน SQL
  • ทำงานเหมือนกัน
  • เลือกตามความชอบในการอ่าน (ไม่มีความแตกต่างด้านประสิทธิภาพ)

5.3 เปรียบเทียบ CURTIME() กับ CURRENT_TIME() (Comparison)

FunctionWhat it returnsFormatNotes
CURTIME()Current time (hour/minute/second)HH:MM:SSMySQL-specific function
CURRENT_TIME()Current time (hour/minute/second)HH:MM:SSSQL-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 caseRecommended function
Need only the current time (hour/minute/second)CURTIME() or CURRENT_TIME()
Need current date and timeNOW()
Need millisecond precisionCURTIME(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 caseRecommended functionExample
Record the current time when inserting dataNOW()INSERT INTO users (name, created_at) VALUES ('Sato', NOW());
Record the current time when updating dataNOW()UPDATE users SET last_login = NOW() WHERE id = 1;
Retrieve data from the past N daysNOW() - INTERVAL X DAYSELECT * FROM orders WHERE order_date >= NOW() - INTERVAL 7 DAY;
Retrieve data within a specific time rangeCURTIME()SELECT * FROM logs WHERE TIME(created_at) BETWEEN '09:00:00' AND '18:00:00';
Convert UTC time to JSTCONVERT_TZ()SELECT CONVERT_TZ(NOW(), 'UTC', 'Asia/Tokyo');
Delete old data (older than 30 days)NOW() - INTERVAL X DAYDELETE 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() ดึงวันที่และเวลาปัจจุบัน, แต่แตกต่างกันใน เวลาที่ค่าถูกประเมิน.

FunctionWhen it’s evaluatedNotes
NOW()At query startReturns a fixed timestamp for the statement
SYSDATE()At execution timeReturns 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 หลักสำหรับรับเวลาปัจจุบัน

FunctionWhat it returnsFormatNotes
NOW()Current date and timeYYYY-MM-DD HH:MM:SSMost common function
SYSDATE()Date and time at executionYYYY-MM-DD HH:MM:SSCan return different values on each evaluation
CURTIME()Current timeHH:MM:SSTime only (no date)
CURRENT_TIME()Current timeHH:MM:SSSame as CURTIME()
CURRENT_TIMESTAMP()Current date and timeYYYY-MM-DD HH:MM:SSAlmost the same as NOW()
UTC_TIMESTAMP()Current UTC date and timeYYYY-MM-DD HH:MM:SSTime 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 เพื่อจัดการข้อมูลได้อย่างมีประสิทธิภาพมากขึ้น.