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

เพิ่มหลายช่วงเวลา (Multiple Intervals) ใน DATE_ADD() ของ MySQL

บทนำ

ฟังก์ชัน 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