การบวกช่วงเวลา (INTERVAL) หลายหน่วยในคำสั่งเดียว
MySQL รองรับการบวก/ลบ INTERVAL หลายหน่วยในคำสั่งเดียวได้ โดยใช้ DATE_ADD ซ้อนกัน หรือ INTERVAL ... + INTERVAL ... (MySQL 8.0+)
สร้างตารางและข้อมูล
mysql> create table DemoTable1376 (
-> AdmissionDate date
-> );
Query OK, 0 rows affected (0.68 sec)
mysql> insert into DemoTable1376 values('2018-01-21');
mysql> insert into DemoTable1376 values('2017-12-01');
mysql> insert into DemoTable1376 values('2018-11-02');
mysql> insert into DemoTable1376 values('2019-03-14');
ข้อมูลต้นฉบับ
+---------------+ | AdmissionDate | +---------------+ | 2018-01-21 | | 2017-12-01 | | 2018-11-02 | | 2019-03-14 | +---------------+
คำสั่ง DATE_ADD ซ้อนกัน (รองรับทุกเวอร์ชัน)
mysql> select date_add(date_add(AdmissionDate, interval 1 year), interval 2 day)
-> as AfterAddingOneYearTwoDays from DemoTable1376;
ผลลัพธ์
+---------------------------+ | AfterAddingOneYearTwoDays | +---------------------------+ | 2019-01-23 | | 2018-12-03 | | 2019-11-04 | | 2020-03-16 | +---------------------------+
วิธีที่สั้นกว่าใน MySQL 8.0+
SELECT AdmissionDate + INTERVAL 1 YEAR + INTERVAL 2 DAY FROM DemoTable1376;
หรือใช้ DATE_ADD กับ expression:
DATE_ADD(AdmissionDate, INTERVAL 1 YEAR + INTERVAL 2 DAY)
หน่วย INTERVAL ที่รองรับ
| หน่วย | ตัวอย่าง |
|---|---|
| MICROSECOND | INTERVAL 500 MICROSECOND |
| SECOND | INTERVAL 30 SECOND |
| MINUTE | INTERVAL 15 MINUTE |
| HOUR | INTERVAL 2 HOUR |
| DAY | INTERVAL 2 DAY |
| WEEK | INTERVAL 1 WEEK |
| MONTH | INTERVAL 3 MONTH |
| QUARTER | INTERVAL 1 QUARTER |
| YEAR | INTERVAL 1 YEAR |
การลบช่วงเวลา
DATE_SUB(date, INTERVAL 1 YEAR)
-- หรือ
date - INTERVAL 1 YEAR
ข้อควรระวัง: การบวก MONTH/YEAR อาจให้ผลลัพธ์ที่ไม่คาดคิดในวันที่สิ้นเดือน (เช่น 2023-01-31 + 1 MONTH = 2023-02-28) MySQL จะปรับให้อยู่ในช่วงวันที่ที่ถูกต้องของเดือนปลายทาง