2012-06-07 19 views
10

Próbuję uzyskać różnicę czasu między 2 użytkownikami, potrzebuję różnicy w godzinach.Jak uzyskać różnicę czasu (w godzinach) między 2 datami

Próbowałem użyć funkcji DATEDIFF, ale jest ona nieprawidłowa.

Oto mój kod:

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

Co masz na myśli "* Różnica czasu między 2 użytkowników *"? Czy odnosisz się do ich stref czasowych? Albo coś innego? Mówisz, że twój istniejący kod jest "* nieprawidłowy *", ale nie mów, co jest z nim nie tak. Czy mamy zgadywać? (Domyślam się, że funkcja '' DATEDIFF() '] (http://dev.mysql.com/doc/en/date-and-time-functions.html#function_datediff) zwraca różnicę w * dniach *, nie * godziny * i przyjmuje tylko dwa argumenty, a nie trzy - ale czy * wszystko * jest błędne?). – eggyal

+0

jeśli u.1 zostało utworzone 2 dni temu, a u.2 zostało utworzone wczoraj, różnica wynosi 24 godziny, na przykład – Ofer

+0

Not clear. Dodaj więcej informacji. – Devart

Odpowiedz

3

Musisz mieć klauzulę from w swojej instrukcji select. Coś

Select date1 - date2 from dual 

zwraca liczbę dni między data1 i data2.

Jeśli chcesz liczbę godzin:

Select (date1 - date2)*24 from dual; 

(to tylko dla Oracle)

+0

Którą jednostkę otrzymujecie? – Ofer

+0

Nie rozumiem twojego pytania, ale jeśli pytasz o typ wyniku, wynikiem jest liczba zmiennoprzecinkowa, która reprezentuje liczbę dni w pierwszym zapytaniu i liczbę godzin w drugim. Na przykład 0,5 dnia oznacza 12 godzin. inny przykład: 0,2 godziny = 0,2 * 60 minut = 12 minut –

+0

Jeśli różnica dat wynosi zero, to co się stanie? jak dostać godzinę? – Sadikhasan

14

Od MySQL DATEDIFF docs:

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

Będziemy chcieli, aby spojrzeć na TIMEDIFF

To daje liczbę godzin różnicy czasu (zakładając, że twoje pola time_c to DATETIME lub coś podobnego)

SELECT HOUR(TIMEDIFF( 
    (SELECT max(u1.time_c) FROM users u), 
    (SELECT max(u2.time_c) FROM users u2) 
)) 
Powiązane problemy