我已经阅读了许多有关使用BETWEEN进行Mysql查询的答案的帖子,但我都无法使用我的数据。
就我而言,我有一个数据表,其中有两个列,两个列都将数据保存为DateTime。我正在尝试纠正一个查询,该查询返回一行数据WHERE RoomToDateTime
是BETWEEN
的另外两个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"
的记录时,此查询不返回任何数据。
这仅适用于日期(不包括时间部分)。谁能看到为什么查询不起作用的原因,或者我将完全错误地解决这个问题。
在此先感谢您的宝贵时间和有益的意见。
答案 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."'