Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

อัปเดต DATETIME ใน MySQL: เพิ่ม 10 ปี 3 เดือน 22 วัน 10 ชั่วโมง 30 นาที

ใช้ INTERVAL Arithmetic บวกช่วงเวลากับ DATETIME

MySQL รองรับการบวก/ลบ INTERVAL กับ DATE, DATETIME, TIMESTAMP โดยตรง สามารถรวมหลายหน่วยเวลาได้

สร้างตารางและข้อมูล

mysql> CREATE TABLE DemoTable1509 (ArrivalTime DATETIME);
Query OK, 0 rows affected (0.51 sec)

mysql> INSERT INTO DemoTable1509 VALUES
    -> ('2018-01-21 10:20:30'),
    -> ('2019-04-01 11:00:00'),
    -> ('2015-12-12 05:45:20');
Query OK, 3 rows affected

ข้อมูลก่อนอัปเดต

+---------------------+
| ArrivalTime         |
+---------------------+
| 2018-01-21 10:20:30 |
| 2019-04-01 11:00:00 |
| 2015-12-12 05:45:20 |
+---------------------+

คำสั่ง UPDATE: บวก INTERVAL หลายหน่วย

mysql> UPDATE DemoTable1509
    -> SET ArrivalTime = ArrivalTime 
    ->     + INTERVAL 10 YEAR
    ->     + INTERVAL 3 MONTH
    ->     + INTERVAL 22 DAY
    ->     + INTERVAL 10 HOUR
    ->     + INTERVAL 30 MINUTE;
Query OK, 3 rows affected (0.17 sec)
Rows matched: 3  Changed: 3  Warnings: 0

ข้อมูลหลังอัปเดต

+---------------------+
| ArrivalTime         |
+---------------------+
| 2028-05-13 20:50:30 |
| 2029-07-23 21:30:00 |
| 2026-04-03 16:15:20 |
+---------------------+

ตรวจสอบการคำนวณ (แถวแรก)

  • ต้นฉบับ: 2018-01-21 10:20:30
  • +10 ปี → 2028-01-21 10:20:30
  • +3 เดือน → 2028-04-21 10:20:30
  • +22 วัน → 2028-05-13 10:20:30
  • +10 ชั่วโมง → 2028-05-13 20:20:30
  • +30 นาที → 2028-05-13 20:50:30 ✓

รูปแบบ INTERVAL ที่รองรับ

คำสั่ง SELECT ทดสอบ INTERVAL (ไม่ UPDATE)

SELECT 
    ArrivalTime,
    ArrivalTime + INTERVAL 10 YEAR + INTERVAL 3 MONTH + INTERVAL 22 DAY + INTERVAL 10 HOUR + INTERVAL 30 MINUTE AS NewArrivalTime
FROM DemoTable1509;

⚠️ ข้อควรระวัง

  • การบวก MONTH/YEAR อาจให้ผลลัพธ์ต่างออกไปหากวันที่ไม่มีในเดือนปลายทาง (เช่น 31 มกราคม + 1 เดือน = 28/29 กุมภาพันธ์)
  • MySQL จัดการ Day Overflow โดยปรับให้เป็นวันสุดท้ายของเดือน
  • ใช้ DATE_ADD() / DATE_SUB() เป็นทางเลือกอีกทางหนึ่ง
หน่วยตัวอย่าง
MICROSECONDINTERVAL 500 MICROSECOND
SECONDINTERVAL 30 SECOND
MINUTEINTERVAL 30 MINUTE
HOURINTERVAL 10 HOUR
DAYINTERVAL 22 DAY
WEEKINTERVAL 3 WEEK
MONTHINTERVAL 3 MONTH
QUARTERINTERVAL 2 QUARTER
YEARINTERVAL 10 YEAR
รวม (Compound)INTERVAL '1 10:30:30' DAY_SECOND