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

MySQL DATE Function: หาความต่างวันระหว่างวันปัจจุบันและวันที่เข้าทำงาน (DATEDIFF)

คำนวณวันทำงาน/อายุงาน: DATEDIFF(CURDATE(), JoiningDate)

DATEDIFF(date1, date2) คืนค่า date1 - date2 เป็นจำนวนวัน (Integer) ใช้กับ DATE หรือ DATETIME

วันที่ปัจจุบัน (สมมติ)

mysql> SELECT CURDATE();
+------------+
| curdate()  |
+------------+
| 2019-10-26 |
+------------+

สร้างตาราง: JoiningDate เก็บเป็น VARCHAR (รูปแบบ DD/MM/YYYY)

mysql> CREATE TABLE DemoTable (JoiningDate VARCHAR(40));
Query OK, 0 rows affected (0.61 sec)

mysql> INSERT INTO DemoTable VALUES
    -> ('10/10/1998'), ('31/12/2010'), ('01/01/2017'), ('25/10/2019');
Query OK, 4 rows affected

ข้อมูลต้นฉบับ

+-------------+
| JoiningDate |
+-------------+
| 10/10/1998  |
| 31/12/2010  |
| 01/01/2017  |
| 25/10/2019  |
+-------------+

คำสั่ง: แปลง String → DATE ด้วย STR_TO_DATE แล้ว DATEDIFF

mysql> SELECT DATEDIFF(CURDATE(), STR_TO_DATE(JoiningDate, '%d/%m/%Y')) 
    -> FROM DemoTable;

ผลลัพธ์ (จำนวนวัน)

+---------------------------------------------------------+
| datediff(curdate(),str_to_date(JoiningDate,'%d/%m/%Y')) |
+---------------------------------------------------------+
|                                                     7686 |
|                                                     3221 |
|                                                     1028 |
|                                                        1 |
+---------------------------------------------------------+

คำอธิบาย

  • STR_TO_DATE(JoiningDate, '%d/%m/%Y') - Parse String 'DD/MM/YYYY' เป็น DATE
  • CURDATE() - วันที่ปัจจุบัน
  • DATEDIFF(date1, date2) - date1 - date2 (วัน)

Format Specifiers สำหรับ STR_TO_DATE

⚠️ Best Practice: เก็บวันที่เป็น DATE/DATETIME ไม่ใช่ VARCHAR

-- ดี: ใช้ DATE Type
CREATE TABLE Employee (
    EmpId INT PRIMARY KEY,
    JoiningDate DATE NOT NULL
);

-- Query เรียบง่าย ไม่ต้อง Parse
SELECT DATEDIFF(CURDATE(), JoiningDate) FROM Employee;

ฟังก์ชันวันที่อื่นที่เกี่ยวข้อง

Specifierความหมาย
%dวัน (01-31)
%mเดือน (01-12)
%Yปี 4 หลัก
%yปี 2 หลัก
%Hชั่วโมง 24h (00-23)
%iนาที (00-59)
%sวินาที (00-59)
Functionคืนค่าตัวอย่าง
DATEDIFF(d1, d2)วัน (Integer)DATEDIFF('2023-01-10', '2023-01-01') = 9
TIMESTAMPDIFF(UNIT, d1, d2)หน่วยที่ระบุTIMESTAMPDIFF(YEAR, '2010-01-01', '2023-01-01') = 13
TIMESTAMPDIFF(MONTH, d1, d2)เดือน...
TIMESTAMPDIFF(DAY, d1, d2)วัน (เหมือน DATEDIFF แต่สลับ Argument)TIMESTAMPDIFF(DAY, '2023-01-01', '2023-01-10') = 9