【问题标题】:Get reservations by time按时间获取预订
【发布时间】:2016-11-03 14:46:22
【问题描述】:

我的 MySQL 有问题,我正在尝试获取所有开始时间大于“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         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' ) 

【问题讨论】:

标签: mysql


【解决方案1】:

你可能有一些转换问题..尝试使用显式转换

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')) 

【讨论】:

  • 什么意思不起作用..你有错误吗? ..错误的结果.? .没有结果?
  • 如果我使用 str_to_date(),我没有得到任何结果。抱歉不清楚。
  • 而不是没有 str_to_date 你会得到一个结果,但是当你改变时间字符串时结果不会改变?
  • 当我使用 str_to_date 时,无论我填写什么都不会得到结果。当我不使用 str_to_date 时,我会得到结果,但是当我将时间设置为 15:42 而不是 16:42 时(在查询。)我仍然得到一个结果
  • 那么你应该更新你的问题,添加相关表的架构..适当的数据样本和预期的结果..
【解决方案2】:

如果 starttimeendtime 列是 TIME 格式,那么这个查询应该可以解决您的问题:

因为 mysql 文档说 “如果启用 NO_ZERO_DATE 或 NO_ZERO_IN_DATE SQL 模式,则不允许零日期或部分日期。”您可能需要先执行此查询:

SET sql_mode = '';

然后是第二个(如果 starttime 和 endtime 列是 TIME 格式):

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')) 

但如果这些列不是该格式,请执行以下操作:

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'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多