MYSQL查询以返回两个DATETIME字段之间的行

时间:2018-09-09 11:11:20

标签: mysql

我已经阅读了许多有关使用BETWEEN进行Mysql查询的答案的帖子,但我都无法使用我的数据。 就我而言,我有一个数据表,其中有两个列,两个列都将数据保存为DateTime。我正在尝试纠正一个查询,该查询返回一行数据WHERE RoomToDateTimeBETWEEN的另外两个DateTime字段。示例:

RoomToDateTime = "2018-09-10 17:00:00"

$FromDateTime   = "2018-09-09 08:00:00" //User selected date and time
$ToDateTime     = "2018-09-10 16:00:00" //User selected date and time

查询:

SELECT *
FROM Conf
WHERE RoomToDateTime BETWEEN '".$FromDateTime ."' AND '".$ToDateTime."'

当我知道存在RoomToDateTime确实包含"2018-09-09 10:00:00"的记录时,此查询不返回任何数据。

这仅适用于日期(不包括时间部分)。谁能看到为什么查询不起作用的原因,或者我将完全错误地解决这个问题。

在此先感谢您的宝贵时间和有益的意见。

2 个答案:

答案 0 :(得分:2)

您应该使用str_to_date

  "SELECT * 
    FROM Conf 
    WHERE RoomToDateTime 
        BETWEEN str_to_date('".$FromDateTime ."', '%Y-%m-%d %T' )  
            AND str_to_date('".$ToDateTime."',  '%Y-%m-%d %T' )"

以适当的日期时间尝试这种方式

  "SELECT * 
    FROM Conf 
    WHERE RoomToDateTime 
        BETWEEN str_to_date('2018-09-09 08:00:00', '%Y-%m-%d %T' )  
            AND str_to_date('2018-09-10 16:00:00', '%Y-%m-%d %T' )"

无论如何,您不应该使用php var ins sql字符串..使用这些vars可能会引起误报... 为避免这种情况,请查看您的php mysql驱动程序以获取准备好的语句和绑定参数

答案 1 :(得分:0)

使用您提供的日期格式,mysql将完全理解<=>=运算符。 (仅概述一个选项):

SELECT *
FROM Conf
WHERE 
   RoomToDateTime >= '".$FromDateTime ."' AND 
   RoomToDateTime <= '".$ToDateTime."'