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

หาความต่างของวันที่เป็นเดือนด้วย TIMESTAMPDIFF ใน MySQL


ฟังก์ชัน TIMESTAMPDIFF()

คำนวณความต่างระหว่างสองวันที่/เวลาในหน่วยที่กำหนด (MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR) คืนค่าจำนวนเต็ม (Integer)

รูปแบบคำสั่ง

TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)

คืนค่า: datetime_expr2 - datetime_expr1 ในหน่วย unit

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

1. สร้างตาราง

mysql> CREATE TABLE DemoTable (
    -> Date1 DATE,
    -> Date2 DATE
    -> );
Query OK, 0 rows affected (1.04 sec)

2. เพิ่มข้อมูล

mysql> INSERT INTO DemoTable VALUES('2017-01-10', '2017-12-10');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES('2018-12-31', '2015-01-02');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable VALUES('2020-03-01', '2019-06-15');
Query OK, 1 row affected (0.19 sec)

3. แสดงข้อมูล

mysql> SELECT * FROM DemoTable;

ผลลัพธ์:

+------------+------------+
| Date1      | Date2      |
+------------+------------+
| 2017-01-10 | 2017-12-10 |
| 2018-12-31 | 2015-01-02 |
| 2020-03-01 | 2019-06-15 |
+------------+------------+
3 rows in set (0.00 sec)

4. หาความต่างเป็นเดือน (ใช้ ABS เพื่อค่าสัมบูรณ์)

mysql> SELECT ABS(TIMESTAMPDIFF(MONTH, Date1, Date2)) FROM DemoTable;

ผลลัพธ์:

+---------------------------------------+
| abs(timestampdiff(MONTH,Date1,Date2)) |
+---------------------------------------+
| 11                                    |
| 47                                    |
| 8                                     |
+---------------------------------------+
3 rows in set (0.03 sec)

อธิบายผลลัพธ์

Date1 Date2 ความต่าง (เดือน) คำนวณ
2017-01-10 2017-12-10 11 Jan → Dec = 11 เดือน
2018-12-31 2015-01-02 47 2015-01 → 2018-12 = 3 ปี 11 เดือน = 47 เดือน
2020-03-01 2019-06-15 8 2019-06 → 2020-03 = 8 เดือน

ฟังก์ชันเปรียบเทียบ

ฟังก์ชัน คืนค่า เหมาะสำหรับ
TIMESTAMPDIFF() Integer (จำนวนเต็ม) อายุ, ระยะเวลาในหน่วยที่ชัดเจน
DATEDIFF() Integer (วัน) ความต่างเป็นวันอย่างเดียว
TIMEDIFF() TIME (HH:MM:SS) ความต่างเวลาในวันเดียวกัน
PERIOD_DIFF() Integer (เดือน) รูปแบบ YYYYMM หรือ YYMM

กรณีการใช้งานจริง

  • คำนวณอายุพนักงาน/ลูกค้า (YEAR)
  • คำนวณระยะเวลาสัญญา/เช่า (MONTH)
  • คำนวณวันค้างชำระ (DAY)
  • รายงานรายเดือน/รายไตรมาส (QUARTER)
  • SLA Monitoring (HOUR, MINUTE)

ข้อควรระวัง

  • ลำดับ Argument: TIMESTAMPDIFF(unit, start, end) → end - start
  • ผลลัพธ์เป็น Integer (ปัดทิ้งเศษ) ไม่ใช่ทศนิยม
  • ใช้ ABS() หากต้องการค่าสัมบูรณ์ (ไม่สนใจว่าวันไหนมาก่อน)
  • DATE Type จะถูกแปลงเป็น DATETIME 00:00:00 อัตโนมัติ