如果数据库中已存在时间,请查找该时间


Find a time if it already exists in databse

我使用mysql查询来检查数据库中存在的任何特定保留。这些条件在患者-医生预约系统中起作用

背景:我有一个系统,它检查可用的时隙。并显示下一个可用的时间。根据系统,我的下一个可用时间是上午9:15到上午10:45。但在管理员方面,我已经设置了上午10:00至10:30的预订,这是由管理员设置的。因此,我需要向用户显示一条消息"在请求的时间9:15到10:45之间有一个预订。你不能使用整个时间"。

我写了一个查询,但它不起作用,它没有给出任何结果

SELECT * 
FROM reservation
WHERE facility_id =  '24'
AND (
'2012-03-02 09:15:00' >= CONCAT( reservation_date,  ' ', reservation_time,  ':00' ) 
AND  '2012-03-02 09:15:00' <= CONCAT( reservation_date,  ' ', reservation_end_time,  ':00' )
)
AND  '2012-03-02 10:45:00' >= ( CONCAT( reservation_date,  ' ', reservation_time,  ':00' ) 
AND  '2012-03-02 10:45:00' <= CONCAT( reservation_date,  ' ', reservation_end_time,  ':00' ) ) 

任何人都可以告诉我我的查询有任何问题。

因为比较的是字符串而不是日期时间值,所以它不应该工作。例如像这样使用Date_FORMAT()

SELECT * 
FROM reservation
WHERE facility_id =  '24'
AND (
 DATE_FORMAT('2012-03-02 09:15:00' , "%Y-%m-%d %H:%i:%s") 
 >= 
 DATE_FORMAT(CONCAT( reservation_date,  ' ', reservation_time,  ':00' ), "%Y-%m-%d %H:%i:%s") 
AND  
...

BTW:这是一个糟糕的设计,如果reservation_datedatetime会更容易,那么您可以使用BETWEEN直接比较这两个值,也可以不使用所有这些强制转换。

尝试将字段强制转换为日期时间字段。。像这样:

CAST('2012-03-02 09:15:00' AS DATETIME)

在您的样品中,您的位置将如下所示:

AND (
CAST('2012-03-02 09:15:00' AS DATETIME) >= CAST(CONCAT( reservation_date,  ' ', reservation_time,  ':00' ) AS DATETIME)
AND  CAST('2012-03-02 09:15:00' AS DATETIME) <= CAST(CONCAT( reservation_date,  ' ', reservation_end_time,  ':00' ) AS DATETIME)
)
AND  CAST('2012-03-02 10:45:00' AS DATETIME) >= ( CAST(CONCAT( reservation_date,  ' ', reservation_time,  ':00' )  AS DATETIME)
AND  CAST('2012-03-02 10:45:00' AS DATETIME) <= CAST(CONCAT( reservation_date,  ' ', reservation_end_time,  ':00' ) AS DATETIME) )