2012-06-07 53 views
10

Tôi đang cố gắng có sự khác biệt về thời gian giữa 2 người dùng, tôi cần sự khác biệt về số giờ.Cách nhận chênh lệch múi giờ (tính theo giờ) giữa 2 ngày

Tôi đã cố sử dụng hàm DATEDIFF nhưng không đúng.

Đây là mã của tôi:

SELECT DATEDIFF(*, 
(SELECT max(u1.time_c) 
FROM users u) 
, 
(SELECT max(u2.time_c) 
FROM users u2) 
+2

Ý anh là gì "* chênh lệch thời gian giữa 2 người dùng *"? Bạn đang đề cập đến múi giờ của họ? Hay cái gì khác? Bạn nói rằng mã hiện tại của bạn là "* sai *" nhưng không nói có gì sai với nó. Chúng ta phải đoán sao? (Tôi đoán là hàm ['DATEDIFF()'] (http://dev.mysql.com/doc/en/date-and-time-functions.html#function_datediff) trả về sự khác biệt trong * ngày *, không * giờ *; và chỉ mất hai đối số, không phải ba - nhưng là * tất cả * đó là sai?). – eggyal

+0

nếu u.1 được tạo 2 ngày trước và u.2 được tạo ngày hôm qua thì sự khác biệt là 24 giờ chẳng hạn – Ofer

+0

Không rõ ràng. Thêm thông tin. – Devart

Trả lời

3

Bạn phải có mệnh đề from trong tuyên bố chọn của mình. Giống như

Select date1 - date2 from dual 

trả về số ngày giữa ngày1 và ngày2.

Nếu bạn muốn số giờ:

Select (date1 - date2)*24 from dual; 

(đây là chỉ cho oracle)

+0

Đơn vị nào bạn nhận được câu trả lời? – Ofer

+0

Tôi không hiểu câu hỏi của bạn, nhưng nếu bạn hỏi về loại kết quả, kết quả là một số dấu chấm động, đại diện cho số ngày trong truy vấn đầu tiên và số giờ trong câu hỏi thứ hai. Ví dụ, 0,5 ngày có nghĩa là 12 giờ. một ví dụ khác: 0,2 giờ = 0,2 * 60 phút = 12 phút –

+0

Nếu chênh lệch ngày bằng 0 thì điều gì sẽ xảy ra? làm thế nào có thể nhận được giờ? – Sadikhasan

14

Từ MySQL DATEDIFF docs:

Only the date parts of the values are used in the calculation. 

Bạn sẽ muốn nhìn vào TIMEDIFF

này sẽ cung cấp cho bạn số giờ trong sự khác biệt trong những thời điểm (giả sử các trường time_c của bạn là DATETIME hoặc tương tự)

SELECT HOUR(TIMEDIFF( 
    (SELECT max(u1.time_c) FROM users u), 
    (SELECT max(u2.time_c) FROM users u2) 
)) 
Các vấn đề liên quan