2009-06-11 29 views
36

Tôi muốn trừ giữa hai giá trị thời gian ngày bằng cách sử dụng SQL trong MySQL sao cho tôi nhận được khoảng thời gian tính bằng phút hoặc giây. Bất kỳ ý tưởng? Tôi muốn chạy một truy vấn SQL lấy các sử dụng từ một cơ sở dữ liệu đã đăng nhập như 10 phút kể từ thời điểm đó.Làm cách nào để trừ sử dụng SQL trong MYSQL giữa hai giá trị thời gian ngày và truy xuất kết quả theo phút hoặc giây?

Trả lời

52

Có hàm TIMEDIFF (expr1, expr2), trả về giá trị của expr1-expr2 và TIME_TO_SEC (expr3), biểu thị expr1 tính bằng giây.

Lưu ý rằng expr1 và expr2 là giá trị ngày giờ và expr3 chỉ là giá trị thời gian.

Kiểm tra this link để biết thêm thông tin.

0

Bạn có thể thử và truyền chúng vào dấu thời gian Unix và lấy sự khác biệt.

48

TIMESTAMPDIFF giống như TIMEDIFF mà Matthew nói, ngoại trừ nó trả về sự khác biệt của hai thời gian trong bất kỳ đơn vị nào bạn mong muốn (giây, phút, giờ, v.v ...).

Ví dụ,

SELECT TIMESTAMPDIFF(MINUTE,LogOutTime,LogInTime) AS TimeLoggedIn 
FROM LogTable 

Would return số phút người dùng đã đăng nhập (giả sử bạn lưu trữ loại điều trong một bảng như thế).

+15

Lưu ý rằng kết quả TIMEDIFF (expr1, expr2) trong expr1 - expr2, trong đó kết quả TIMESTAMPDIFF (đơn vị, expr1, expr2) trong expr2 - expr1. Chỉ cần một cái gì đó để xem ra cho. –

+0

@Matthew Jones: Tốt. – Welbog

+0

Cảm ơn vì người đàn ông này quá :) – Ali

9

tôi sẽ làm điều đó như thế này - lấy nơi hoạt động cuối cùng là trong vòng 10 phút bây giờ

SELECT * FROM table WHERE last_activity >= DATE_SUB(NOW(), INTERVAL 10 MINUTE) 
+1

Bạn nên sử dụng một số thao tác trên trường chỉ mục. Trong trường hợp này, MySQL bỏ qua chỉ mục đó: [example] (http://sqlfiddle.com/#!2/9619f0/1) (kiểm tra xem có bao nhiêu trường được xử lý khi bạn sử dụng DATE_ADD trên trường và số lượng trường được xử lý khi nào bạn DATE_SUB sử dụng trên hằng số (như NOW()) Vì vậy, câu hỏi của bạn PHẢI tiếp theo:. 'SELECT * FROM table WHERE last_activity> = DATE_SUB (NOW(), INTERVAL 10 PHÚT) ' quy tắc này là cũng áp dụng cho các trường khác là một phần của chỉ mục –

+0

Điểm tốt, và các ví dụ hay, tôi đã cập nhật câu trả lời. –

0

CHỌN TIMESTAMPDIFF (MINUTE, LogOutTime, LogInTime) AS TimeLoggedIn TỪ LogTable


Ví dụ này sẽ làm hỏng thời gian nếu nó được sử dụng bằng cách sử dụng thời gian đơn lẻ. Vì vậy, để tính toán thời gian millitairy tôi không khuyên bạn nên nó Bởi vì nó kết quả đầu ra giá trị âm.

Các vấn đề liên quan