选择距当前时间2小时以内的行

时间:2019-05-24 07:09:49

标签: mysql date time

我正在将PHP与MySQL配合使用,并且希望选择从现在起2小时内具有预订时间的行。如何将数据库中的内容与NOW() MySQL函数进行比较?

我有pickupDate格式的yyyy-mm-dd列和pickupTime格式的HH:mm列(24小时)。我尝试使用NOW()创建一个查询,该查询返回12小时制的时间HH:mm:ss,例如2019-05-24 07:54:06。我不知道如何将其格式化为19:54,或者是否应该使用其他函数。

例如,如果当前日期和时间是19年5月24日19:54:06,那么我想选择该日期19:54到21:54之间的行。

我的表结构是:

referenceNo VARCHAR(100)    
pickupDate  DATE
pickupTime  VARCHAR(100)

2 个答案:

答案 0 :(得分:2)

您需要从DATETIMEpickupDate中创建一个pickupTime兼容的值(可以通过CONCAT将它们在一起来完成),然后可以进行比较时间范围为NOW()至2小时后:

SELECT *
FROM yourtable
WHERE CONCAT(pickupDate, ' ', pickupTime) BETWEEN NOW() AND NOW() + INTERVAL 2 HOUR

Demo on dbfiddle

答案 1 :(得分:0)

要在php中添加两个小时

$hoursnow     = date('H:i');
$timestamp    = strtotime(date('H:i')) + 60*60*2;
$plusTwohours = date('H:i', $timestamp);

然后$PlusTwohours使用此变量对查询进行如下操作

SQL查询:

$sqlQuery = 'select * from foodorder where pickupDate=DATE(NOW()) AND pickupTime>='.$hoursnow.' and pickupTime<='.$plusTwohours;
$result   = mysql_query($sqlQuery);

变量$result将具有查询值

第二种情况:在5月24日23:30:00结束之前添加小时数

对于同一列PickupDate,应该在两个不同的日期之前处理

$d = new DateTime('2011-01-01 23:30:30');

$startDate =  $d->format('Y-m-d H:i:s'); // For testing purpose assigned manually
$starttime = date('H:i');

// Here Process start, storing end date by adding two hours
$enddate1 = strtotime($startDate) + 60*60*2;

$enddate = date('Y-m-d', $enddate1); // Extracting date alone
$endtime = date('H:i', $enddate1); // Extracting time alone

必须比较列拾取日期的开始和结束日期,这是查询

$sqlQuery = "select * from foodorder where pickupDate>=DATE(".$startDate.") AND pickupDate<=DATE(".$enddate.") AND pickupTime>='".$starttime."' AND pickupTime<='".$endtime."'";
$result   = mysql_query($sqlQuery);