UNIX_TIMESTAMP дата і розніца ў часе

Я захоўваюцца тры асноўных часовых метак і часу ў маёй табліцы базы дадзеных, фармат выглядае наступным чынам:

mysql> select receivedtime, requesttime, sla from table;
+---------------------+---------------------+----------+
| receivedtime        | requesttime         | sla      |
+---------------------+---------------------+----------+
| 2013-05-26 22:37:04 | 2013-05-26 12:37:04 | 02:59:59 |
| 2013-05-26 14:36:44 | 2013-05-21 12:39:09 | 72:00:00 |
+---------------------+---------------------+----------+
2 rows in set (0.00 sec)

Мне трэба паставіць некалькі ўмоў, як паказана ніжэй:

difference = (receivedtime - requesttime);

if [difference <= sla] 
{
   show meet
} else {
   show don't meet
}

легенда:

receivedtime [timestamp] as because days 
requesttime [timestamp] as because days 
sla [time] as because hour

Я праверыў UNIX_TIMESTAMP() з MySQL, StrToTime() з PHP і некалькі іншых спробаў.

Я таксама праверыў некалькі нітак @ stackoverflow.com, але я не магу знайсці правільнае рашэнне.

Любыя ідэі ...!

0
Чаму UNIX_TIMESTAMP не працуе?
дададзена аўтар kelunik, крыніца
Што вы маеце на ўвазе сустракаюцца . Што вы хочаце ў Сустрэча
дададзена аўтар Yogus, крыніца
Я маю на ўвазе сустрэнецца это ДА/ДОБРА і не адпавядае не з'яўляецца NO/НЕ ДОБРА, я думаю, што маё выкананне было правільна. Але, я быў зьбянтэжаны з UNIX_TIMESTAMP() . Цяпер я пацвердзіў, што быў сапраўды мае рацыю запыт, каб убачыць @CORRUPT адказ
дададзена аўтар user2160110, крыніца

6 адказы

Праверце TIMESTAMPDIFF() і

2
дададзена
Гэта выглядае добра са мной ...
дададзена аўтар user2160110, крыніца

спрабаваць

SELECT receivedtime, 
       requesttime,
       CASE WHEN TIMESTAMPDIFF(SECOND, requesttime, receivedtime) < TIME_TO_SEC(sla) 
            THEN 'meet' ELSE 'don\'t meet' END sla
  FROM table1

Вось <�моцны> SQLFiddle дэма

1
дададзена
Гэта выглядае добра са мной ... Дзякуй чувак
дададзена аўтар user2160110, крыніца

Паспрабуйце выбраць з базы дадзеных, як гэта ...

select TIMESTAMPDIFF(SECOND, receivedtime, requesttime) as difference, TIME_TO_SEC(sla) as slasecs from table

а затым вы можаце зрабіць свой.

if [difference <= sla]
{
   show meet
} 
else 
{
   show don't meet
}
1
дададзена

Вы можаце зрабіць гэта ў SQL

SELECT (UNIX_TIMESTAMP(receivedtime) - UNIX_TIMESTAMP(requesttime)) AS difference FROM table

гэта дае розніцу ў секундах.

0
дададзена

паспрабуйце гэта

select TIMESTAMPDIFF(SECOND,`requesttime`,`receivedtime`) as timeDiff FROM `table` 
WHERE TIMESTAMPDIFF(SECOND,`requesttime`,`receivedtime`) > TIME_TO_SEC(`sla`)

SEE SQL скрыпку

You can find relevant in mysql documentation

0
дададзена
@Deonia нічога не было проста фіктыўная ўстаноўка для тэставання .if што прычына downvote я магу, вядома, выправіць гэта ..
дададзена аўтар alwaysLearn, крыніца
Whay ўсе VARCHAR, а не часовую пазнаку
дададзена аўтар Yogus, крыніца

Гэта поле даты і часу, а не поле часовай пазнакі. Вы павінны пачаць з чытання на тое, што часовая адзнака.

вы можаце высветліць розніцу шляхам пераўтварэння ў змяняць час з наступным адніманнем.

$recieved = strtotime($res['receivedtime']);
$requested = strtotime($res['requesttime']);
$difference = $recieved - $requested;
if($difference <= $sla){
  //do stuff
}
0
дададзена