Có cách nào tôi có thể thực hiện một truy vấn trong MySQL sẽ cung cấp cho tôi sự khác biệt giữa hai dấu thời gian trong vài giây hay tôi cần thực hiện điều đó trong PHP? Và nếu vậy, tôi sẽ làm như thế nào?
Có cách nào tôi có thể thực hiện một truy vấn trong MySQL sẽ cung cấp cho tôi sự khác biệt giữa hai dấu thời gian trong vài giây hay tôi cần thực hiện điều đó trong PHP? Và nếu vậy, tôi sẽ làm như thế nào?
Câu trả lời:
Bạn có thể sử dụng TIMEDIFF()
và các TIME_TO_SEC()
chức năng như sau:
SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
Bạn cũng có thể sử dụng UNIX_TIMESTAMP()
hàm như @Amber đã đề xuất trong một câu trả lời khác:
SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') -
UNIX_TIMESTAMP('2010-08-20 12:00:00') diff;
+------+
| diff |
+------+
| 60 |
+------+
1 row in set (0.00 sec)
Nếu bạn đang sử dụng TIMESTAMP
kiểu dữ liệu, tôi đoán rằng UNIX_TIMESTAMP()
giải pháp sẽ nhanh hơn một chút, vì TIMESTAMP
các giá trị đã được lưu trữ dưới dạng số nguyên đại diện cho số giây kể từ kỷ nguyên ( Nguồn ). Trích dẫn tài liệu :
Khi
UNIX_TIMESTAMP()
được sử dụng trên mộtTIMESTAMP
cột, hàm trả về giá trị dấu thời gian bên trong trực tiếp, không có chuyển đổi ngầm định "chuỗi-sang-Unix-dấu thời gian".Hãy nhớ rằng
TIMEDIFF()
kiểu dữ liệu trả về làTIME
.TIME
giá trị có thể nằm trong khoảng từ '-838: 59: 59' đến '838: 59: 59' (khoảng 34,96 ngày)
Còn về "TIMESTAMPDIFF":
SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html# Chức năng_timestampdiff
str_to_date(date_column, '%m/%d/%Y')
trong hàm TIMESTAMPDIFF cho cột cần sửa định dạng.
TIME_TO_SEC
tối đa ở mức tối đa 3020399
trong khi điều này trả về giá trị chính xác.
Lưu ý rằng TIMEDIFF()
giải pháp chỉ hoạt động khi cách datetimes
nhau ít hơn 35 ngày !
TIMEDIFF()
trả về một TIME
kiểu dữ liệu và giá trị tối đa cho TIME là 838: 59: 59 giờ (= 34,96 ngày)
unit
tham số thànhSECOND
.