ใช้ UNIX_TIMESTAMP() แปลงเป็นวินาที แล้วลบกัน
UNIX_TIMESTAMP() แปลง DATETIME/TIMESTAMP เป็นวินาทีนับจาก epoch (1970-01-01)
รูปแบบคำสั่ง
SELECT UNIX_TIMESTAMP(yourColumnName1) - UNIX_TIMESTAMP(yourColumnName2) AS anyVariableName FROM yourTableName;
ตัวอย่างสร้างตารางและข้อมูล
mysql> CREATE TABLE DifferenceInSeconds (
-> FirstTimestamp TIMESTAMP,
-> SecondTimestamp TIMESTAMP
-> );
Query OK, 0 rows affected (0.93 sec)
mysql> INSERT INTO DifferenceInSeconds VALUES('2012-12-12 13:16:55','2012-12-12 13:13:55');
mysql> INSERT INTO DifferenceInSeconds VALUES('2014-10-11 12:15:50','2014-10-11 12:13:50');
mysql> INSERT INTO DifferenceInSeconds VALUES('2018-12-14 13:30:53','2018-12-14 13:27:53');
ข้อมูลทั้งหมด
mysql> SELECT * FROM DifferenceInSeconds;
+---------------------+---------------------+ | FirstTimestamp | SecondTimestamp | +---------------------+---------------------+ | 2012-12-12 13:16:55 | 2012-12-12 13:13:55 | | 2014-10-11 12:15:50 | 2014-10-11 12:13:50 | | 2018-12-14 13:30:53 | 2018-12-14 13:27:53 | +---------------------+---------------------+ 3 rows in set (0.00 sec)
คำนวณความต่างเป็นวินาที
mysql> SELECT UNIX_TIMESTAMP(FirstTimestamp) - UNIX_TIMESTAMP(SecondTimestamp) AS Seconds
-> FROM DifferenceInSeconds;
+---------+ | Seconds | +---------+ | 180 | | 120 | | 180 | +---------+ 3 rows in set (0.00 sec)
กรณีไม่แน่ใจว่าตัวไหนมากกว่า: ใช้ ABS()
SELECT ABS(UNIX_TIMESTAMP(FirstTimestamp) - UNIX_TIMESTAMP(SecondTimestamp)) AS Seconds FROM DifferenceInSeconds;
ทดสอบเพิ่มข้อมูลที่ First < Second
mysql> INSERT INTO DifferenceInSeconds VALUES('2018-12-14 13:26:53','2018-12-14 13:31:53');
ไม่ใช้ ABS() → ได้ค่าลบ
mysql> SELECT UNIX_TIMESTAMP(FirstTimestamp) - UNIX_TIMESTAMP(SecondTimestamp) AS Seconds
-> FROM DifferenceInSeconds;
+---------+ | Seconds | +---------+ | 180 | | 120 | | 180 | | -300 | +---------+ 4 rows in set (0.00 sec)
ใช้ ABS() → ได้ค่าบวกเสมอ
mysql> SELECT ABS(UNIX_TIMESTAMP(FirstTimestamp) - UNIX_TIMESTAMP(SecondTimestamp)) AS Seconds
-> FROM DifferenceInSeconds;
+---------+ | Seconds | +---------+ | 180 | | 120 | | 180 | | 300 | +---------+ 4 rows in set (0.00 sec)
ฟังก์ชันเพิ่มเติมสำหรับความต่างเวลา:
TIMESTAMPDIFF(SECOND, ts1, ts2)- ความต่างเป็นวินาที (รองรับ unit อื่นๆ)TIMEDIFF(ts1, ts2)- คืนค่าเป็น TIME format (HH:MM:SS)DATEDIFF(date1, date2)- ความต่างเป็นวัน