Mysql 按时间预定
我对MySQL有一个问题,我正在尝试获取starttime大于“16:42”但小于“18:42”的所有预订。我试过这个,但当我用“15:42”而不是“16:42”时,我仍然得到了相同的结果Mysql 按时间预定,mysql,Mysql,我对MySQL有一个问题,我正在尝试获取starttime大于“16:42”但小于“18:42”的所有预订。我试过这个,但当我用“15:42”而不是“16:42”时,我仍然得到了相同的结果 SELECT * FROM `tables` INNER JOIN reservation_table ON `tables`.`id` = reservation_table.table_id INNER JOIN reservations ON
SELECT *
FROM `tables`
INNER JOIN reservation_table
ON `tables`.`id` = reservation_table.table_id
INNER JOIN reservations
ON reservations.id = reservation_table.reservation_id
INNER JOIN customers
ON customers.id = reservations.customer_id
WHERE `date` = '2016-11-02'
AND ( starttime <= '19:42'
AND starttime >= '16:42' )
选择*
从“表”开始
内部联接保留表
在`tables`.`id`=预订\u table.table\u id
内部联接保留
ON reservations.id=reservations\u table.reservations\u id
内部加入客户
ON customers.id=reservations.customer\u id
其中“日期”=“2016-11-02”
和(开始时间='16:42')
可能是因为您有一些转换问题。。尝试使用显式转换
SELECT *
FROM `tables`
INNER JOIN reservation_table
ON `tables`.`id` = reservation_table.table_id
INNER JOIN reservations
ON reservations.id = reservation_table.reservation_id
INNER JOIN customers
ON customers.id = reservations.customer_id
WHERE `date` = '2016-11-02'
AND ( starttime <= str_to_date('19:42', '%H:%i' )
AND starttime >= str_to_date('16:42' , '%H:%i'))
选择*
从“表”开始
内部联接保留表
在`tables`.`id`=预订\u table.table\u id
内部联接保留
ON reservations.id=reservations\u table.reservations\u id
内部加入客户
ON customers.id=reservations.customer\u id
其中“日期”=“2016-11-02”
和(starttime=str-to-date('16:42','%H:%i'))
如果starttime
和endtime
列采用TIME
格式,则此查询应能解决您的问题:
因为正如mysql文档所说,“如果启用了无日期或无日期SQL模式下的无日期,则不允许零日期或部分日期。”您可能需要首先执行此查询:
SET sql_mode = '';
然后是第二个(如果starttime和endtime列采用时间格式):
选择*
从“表”开始
内部联接保留表
在`tables`.`id`=预订\u table.table\u id
内部联接保留
ON reservations.id=reservations\u table.reservations\u id
内部加入客户
ON customers.id=reservations.customer\u id
其中“日期”=“2016-11-02”
和(starttime=str-to-date('16:42','%H:%i'))
但如果这些列不是该格式,请执行以下操作:
SELECT *
FROM `tables`
INNER JOIN reservation_table
ON `tables`.`id` = reservation_table.table_id
INNER JOIN reservations
ON reservations.id = reservation_table.reservation_id
INNER JOIN customers
ON customers.id = reservations.customer_id
WHERE `date` = '2016-11-02'
AND ( str_to_date(starttime, '%H:%i') <= str_to_date('19:42', '%H:%i')
AND str_to_date(starttime, '%H:%i') >= str_to_date('16:42' , '%H:%i'))
选择*
从“表”开始
内部联接保留表
在`tables`.`id`=预订\u table.table\u id
内部联接保留
ON reservations.id=reservations\u table.reservations\u id
内部加入客户
ON customers.id=reservations.customer\u id
其中“日期”=“2016-11-02”
和(str_to_date(starttime,'%H:%i')=str_to_date('16:42','%H:%i'))
为什么不将日期和时间合并到一个字段中:starttime列是哪种数据类型?是时间数据类型What means不起作用。。你有错误吗。。错误的结果。没有结果?如果我使用str_to_date(),我不会得到任何结果。抱歉,不清楚。如果没有str_to_date,您会得到一个结果,但当您更改时间字符串时,结果不会更改?当我使用str_to_date时,无论我填写什么,我都不会得到结果。当我不使用str_to_date时,我会得到一个结果,但当我将时间设置为15:42而不是16:42(在查询中)时,我仍然会得到一个结果。您应该更新您的问题,添加相关表的架构。。适当的数据样本和预期结果。。
SELECT *
FROM `tables`
INNER JOIN reservation_table
ON `tables`.`id` = reservation_table.table_id
INNER JOIN reservations
ON reservations.id = reservation_table.reservation_id
INNER JOIN customers
ON customers.id = reservations.customer_id
WHERE `date` = '2016-11-02'
AND ( str_to_date(starttime, '%H:%i') <= str_to_date('19:42', '%H:%i')
AND str_to_date(starttime, '%H:%i') >= str_to_date('16:42' , '%H:%i'))