2015-12-23 17 views
5

mam dwa razy zapisywane w bazie danych jakoRóżnica między dwa ciągi z upływem czasu i dnia tygodnia

DayTime1 = "Wed 09:00" 
DayTime2 = "Wed 13:00" 

Chcę uzyskać różnicę między tymi dwiema datami w minutach.

TIMESTAMPDIFF(MINUTES,DayTime1,DayTime2) return null 

Nie jestem w stanie przez to przejść. Czy jest jakiś sposób, aby uzyskać różnicę?

+0

jaki jest typ danych DayTime1 i DayTime2? – Amol

+0

Dlaczego to robi w MySQL? – Strawberry

+0

Twoje dane techniczne są niejasne. Powiedzmy, że dziś jest środa. Jaka byłaby oczekiwana produkcja "wt. 23:50" - "środa 00: 10"? 20? -20? Coś innego? –

Odpowiedz

2

Proszę pamiętać, że SELECT STR_TO_DATE("Wed 09:00", "%a %H:%i") powraca 0000-00-0009:00:00 (przynajmniej na moim lokalnym MySQL 5.5.16). Jeśli porównując różne dni, nie uzyskasz poprawnego wyniku.

Jeśli dany rok i tydzień, nazwa dnia będzie interpretowana do rzeczywistej daty, więc porównania mogą również obejmować dni. Na przykład (choć niezbyt elegancko, przyznaję):

SELECT TIMESTAMPDIFF(MINUTE, 
    STR_TO_DATE(CONCAT(YEAR(CURDATE()), WEEKOFYEAR(CURDATE()), ' Tue 09:00'), '%x%v %a %H:%i'), 
    STR_TO_DATE(CONCAT(YEAR(CURDATE()), WEEKOFYEAR(CURDATE()), ' Wed 13:00'), '%x%v %a %H:%i') 
) 
+0

Twoja odpowiedź brzmi: mam poprawny wynik. –

+0

@ Parikshit.S.Shekhawat Czy mogę zaproponować, abyś edytował pytanie i wyjaśnił, czego oczekujesz, więc to wszystko może pomóc innym? –

2

Ponieważ również obejmowały php -tag, jestem zakładając rozwiązanie PHP jest ważna także:

$daytime1 = "Wed 09:00"; 
$daytime2 = "Wed 13:00"; 
$diff = abs(strtotime($daytime1) - strtotime($daytime2)); //absolute diff in seconds 
$diff = $diff/60; //Difference in minutes 

EDIT:

I tu jest czystym rozwiązaniem MySQL:

SELECT ABS(
    TIME_TO_SEC(
     TIMEDIFF(
      STR_TO_DATE("Wed 09:00", "%a %H:%i"), 
      STR_TO_DATE("Wed 13:00", "%a %H:%i") 
     ) 
    ) 
)/60 

Drugi parametr, "%a %H:%i", to format daty. Jeśli zawsze ma format "Pierwsze trzy litery dnia tygodnia, spacja, godzina z wiodącym zerem, :, minuty", możesz użyć tego formatu.

+0

Należy pamiętać, że ciąg z wczorajszym dniem powszednim zwróci * następny * dzień, który odpowiada raczej dniom tygodnia niż wczoraj. Być może to, co OP chce, czy nie. –

Powiązane problemy