Разница между двумя временными метками, которые должны быть возвращены в формате d: h: m:s в mysql

#mysql #sql

#mysql #sql

Вопрос:

У меня есть два столбца временных меток, и я хочу получить разницу между ними в этом формате: 5 дней 3 часа 24 минуты 30 секунд

Ответ №1:

 SELECT SEC_TO_TIME( TIMESTAMPDIFF( 
SECOND ,  '2012-06-06 15:20:18',  '2012-06-09 13:13:55' ) )
  

попробуйте это, вы можете получить значение hh: mm: ss

Ответ №2:

Используйте этот код mysql:

 SELECT concat(floor(TIMESTAMPDIFF(SECOND,`timevalue`,now())/(3600*24)),'days ',
              floor((TIMESTAMPDIFF(SECOND,`timevalue`,now()) - (floor(TIMESTAMPDIFF(SECOND,`timevalue`,now())/(3600*24))*3600*24))/3600),'hours ',
              floor((TIMESTAMPDIFF(SECOND,`timevalue`,now()) - (floor((TIMESTAMPDIFF(SECOND,`timevalue`,now()) - (floor(TIMESTAMPDIFF(SECOND,`timevalue`,now())/(3600*24))*3600*24))/3600)*3600))/60),'minutes ',
              (TIMESTAMPDIFF(SECOND,`timevalue`,now()) - (floor((TIMESTAMPDIFF(SECOND,`timevalue`,now()) - (floor((TIMESTAMPDIFF(SECOND,`timevalue`,now()) - (floor(TIMESTAMPDIFF(SECOND,`timevalue`,now())/(3600*24))*3600*24))/3600)*3600))/60)*60)),'seconds ') 
FROM `time_tbl`
  

Здесь time_tbl имя вашей таблицы и timevalue имя вашего атрибута. Удачного кодирования.

Ответ №3:

Вы можете использовать что-то вроде этого:

  SELECT CONCAT(
 FLOOR(HOUR(TIMEDIFF('2010-01-06 08:46:00', '2010-01-01 12:30:20')) / 24), ' days ',
 MOD(HOUR(TIMEDIFF('2010-01-06 08:46:00', '2010-01-01 12:30:20')), 24), ' hours ',
 MINUTE(TIMEDIFF('2010-01-06 08:46:00', '2010-01-01 12:30:20')), ' minutes ',
 SECOND(TIMEDIFF('2010-01-06 08:46:00', '2010-01-01 12:30:20')),' seconds') as dif
  

В mysql нет ничего подобного встроенному. Замените ваши значения tiemstamp везде, где требуется.