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

การอัปเดตคอลัมน์วันที่ (DATE) ใน MySQL ด้วย DATE_ADD

เมื่อต้องการแก้ไขค่าคอลัมน์ชนิด DATE (หรือ DATETIME) โดยบวก/ลบช่วงเวลา ใช้ฟังก์ชัน DATE_ADD() หรือ DATE_SUB() ร่วมกับ INTERVAL

ตัวอย่างการใช้งาน

สร้างตารางวันที่เข้าทำงาน:

mysql> CREATE TABLE DemoTable1451 (JoiningDate DATE);

เพิ่มข้อมูล:

mysql> INSERT INTO DemoTable1451 VALUES ('2019-07-21'), ('2018-01-31'), ('2017-06-01');

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

mysql> SELECT * FROM DemoTable1451;
+-------------+
| JoiningDate |
+-------------+
| 2019-07-21  |
| 2018-01-31  |
| 2017-06-01  |
+-------------+

อัปเดต: เพิ่ม 1 ปี ทุกแถว:

mysql> UPDATE DemoTable1451 
    -> SET JoiningDate = DATE_ADD(JoiningDate, INTERVAL 1 YEAR);

ผลลัพธ์:

mysql> SELECT * FROM DemoTable1451;
+-------------+
| JoiningDate |
+-------------+
| 2020-07-21  |
| 2019-01-31  |
| 2018-06-01  |
+-------------+

รูปแบบ INTERVAL ที่ใช้บ่อย

คำสั่งที่เกี่ยวข้อง

  • DATE_ADD(date, INTERVAL expr unit): บวกช่วงเวลา
  • DATE_SUB(date, INTERVAL expr unit): ลบช่วงเวลา
  • ADDDATE(date, INTERVAL expr unit): Alias ของ DATE_ADD
  • SUBDATE(date, INTERVAL expr unit): Alias ของ DATE_SUB
  • date + INTERVAL expr unit: Shorthand (MySQL Extension)

ตัวอย่างเพิ่มเติม

-- ลบ 30 วัน
UPDATE DemoTable1451 SET JoiningDate = DATE_SUB(JoiningDate, INTERVAL 30 DAY);

-- บวก 6 เดือน
UPDATE DemoTable1451 SET JoiningDate = DATE_ADD(JoiningDate, INTERVAL 6 MONTH);

-- ใช้ Shorthand (MySQL Only)
UPDATE DemoTable1451 SET JoiningDate = JoiningDate + INTERVAL 1 YEAR;

-- อัปเดตเฉพาะบางแถว
UPDATE DemoTable1451 SET JoiningDate = DATE_ADD(JoiningDate, INTERVAL 1 YEAR)
WHERE YEAR(JoiningDate) < 2019;

ข้อควรระวัง

  • DATE_ADD/DATE_SUB คืนค่า DATE/DATETIME ตาม Input
  • วันสุดท้ายของเดือน: '2019-01-31' + INTERVAL 1 MONTH = '2019-02-28' (ไม่ใช่ 31)
  • Year พุทธศักราช: ต้องแปลงเป็น ค.ศ. ก่อน คำนวณ แล้วค่อยแปลงกลับ
  • ใช้ WHERE เพื่อจำกัด Scope ป้องกันอัปเดตผิดพลาด
หน่วยตัวอย่างคำอธิบาย
DAYINTERVAL 7 DAYบวก 7 วัน
MONTHINTERVAL 3 MONTHบวก 3 เดือน
YEARINTERVAL 1 YEARบวก 1 ปี
HOUR/MINUTE/SECONDINTERVAL 2 HOURสำหรับ DATETIME/TIMESTAMP
COMBINEDINTERVAL '1 12' DAY_HOUR1 วัน 12 ชั่วโมง