บทนำ
ฟังก์ชัน DATE_ADD() รองรับการเพิ่มช่วงเวลา (Interval) เดียวต่อครั้ง หากต้องการเพิ่มหลายช่วง (เช่น 6 เดือน + 1 ปี) ต้อง **ซ้อน (Nest) DATE_ADD()** หลายชั้น
เวลาปัจจุบัน (สมมติ)
mysql> SELECT NOW();
+---------------------+
| NOW() |
+---------------------+
| 2019-06-15 12:24:06 |
+---------------------+
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> ArrivalDate DATETIME
-> );
Query OK, 0 rows affected (1.15 sec)
-- เพิ่ม 6 เดือน แล้วค่อยเพิ่ม 1 ปี (รวม 1 ปี 6 เดือน)
mysql> INSERT INTO DemoTable VALUES(
-> DATE_ADD(DATE_ADD(NOW(), INTERVAL 6 MONTH), INTERVAL 1 YEAR)
-> );
-- เพิ่ม 3 เดือน แล้วค่อยเพิ่ม 4 ปี (รวม 4 ปี 3 เดือน)
mysql> INSERT INTO DemoTable VALUES(
-> DATE_ADD(DATE_ADD(NOW(), INTERVAL 3 MONTH), INTERVAL 4 YEAR)
-> );
แสดงข้อมูล
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+---------------------+
| ArrivalDate |
+---------------------+
| 2020-12-15 12:23:39 |
| 2023-09-15 12:23:48 |
+---------------------+
2 rows in set (0.00 sec)
คำอธิบายการคำนวณ
| คำสั่ง | คำนวณจาก NOW() (2019-06-15) | ผลลัพธ์ |
|---|---|---|
| DATE_ADD(NOW(), INTERVAL 6 MONTH) | 2019-06-15 + 6 เดือน | 2019-12-15 |
| DATE_ADD(..., INTERVAL 1 YEAR) | 2019-12-15 + 1 ปี | 2020-12-15 |
| DATE_ADD(NOW(), INTERVAL 3 MONTH) | 2019-06-15 + 3 เดือน | 2019-09-15 |
| DATE_ADD(..., INTERVAL 4 YEAR) | 2019-09-15 + 4 ปี | 2023-09-15 |
วิธีอื่น: ใช้การคำนวณวันที่โดยตรง (MySQL 8.0+)
-- ใช้ + INTERVAL หลายตัว (ไม่รองรับในรุ่นเก่า)
SELECT NOW() + INTERVAL 6 MONTH + INTERVAL 1 YEAR;
-- หรือใช้ DATE_ADD ครั้งเดียวกับ INTERVAL ที่รวมกัน (ไม่ได้ใน MySQL)
-- ต้องคำนวณรวมเป็นหน่วยเดียว: 18 MONTH, 51 MONTH, etc.
SELECT DATE_ADD(NOW(), INTERVAL 18 MONTH);
Interval Units ที่ใช้ได้
- MICROSECOND, SECOND, MINUTE, HOUR
- DAY, WEEK, MONTH, QUARTER, YEAR
- SECOND_MICROSECOND, MINUTE_MICROSECOND, MINUTE_SECOND, HOUR_MICROSECOND, HOUR_SECOND, HOUR_MINUTE, DAY_MICROSECOND, DAY_SECOND, DAY_MINUTE, DAY_HOUR, YEAR_MONTH