我使用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_date
是datetime
会更容易,那么您可以使用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) )