2015-12-23 12 views
5

Ho due volte salvati nel database comeDifferenza tra due stringhe con il tempo e giorno della settimana

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

voglio ottenere la differenza tra queste due date in pochi minuti.

TIMESTAMPDIFF(MINUTES,DayTime1,DayTime2) return null 

Io non sono in grado di ottenere attraverso di essa. C'è un modo per fare la differenza?

+0

qual è il tipo di dati e DayTime1 DayTime2? – Amol

+0

Perché farlo in MySQL? – Strawberry

+0

Le tue specifiche sono piuttosto vaghe. Diciamo che oggi è mercoledì. Qual è l'uscita prevista di "Tue 23:50" - "Wed 00: 10"? 20? -20? Qualcos'altro? –

risposta

2

Si prega di notare, che i rendimenti SELECT STR_TO_DATE("Wed 09:00", "%a %H:%i")0000-00-0009:00:00 (almeno sul mio MySql locale 5.5.16). Quindi, se confronti diversi giorni, non otterrai il risultato corretto.

Se viene assegnato un anno e una settimana, il nome del giorno verrà interpretato in una data reale, pertanto i confronti possono comprendere anche giorni. Per esempio (anche se non molto elegante, lo ammetto):

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

La tua risposta è ottenere il risultato corretto –

+0

@ Parikshit.S.Shekhawat Posso suggerire di modificare la domanda e spiegare quale risultato ti aspetti, in modo che tutto ciò possa aiutare gli altri? –

2

Dal momento che comprendeva anche la php -tag, sto assumendo una soluzione PHP è valido così:

$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:

Ed ecco una soluzione pura 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 

Il secondo parametro, "%a %H:%i" è il formato della data. Se è sempre nel formato "Prime tre lettere del giorno della settimana, spazio, ora con zero iniziale, :, minuti", è possibile utilizzare questo formato.

+0

Si prega di notare che una stringa con giorno della settimana di ieri restituirà * prossimo * giorno che corrisponde a tale giorno della settimana, piuttosto che ieri. Potrebbe essere ciò che l'OP vuole o no. –

Problemi correlati