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

คำนวณความต่างระหว่าง Timestamp สองค่าเป็นวินาทีใน MySQL

ใช้ 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) - ความต่างเป็นวัน