我有mysql查询来检查数据库中存在的任何特定预留。这些条件适用于患者医生预约系统
背景: 我有系统检查可用的时间段。并显示下一个可用时间。根据系统,我的下一个可用时间是上午9:15到10:45 AM。但是在管理员方面我已经预订了上午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' ) )
任何人都可以告诉我查询的任何问题。
答案 0 :(得分:0)
尝试将字段转换为日期时间字段..像这样:
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) )
答案 1 :(得分:0)
因为你在比较字符串而不是日期时间值,所以它不应该工作。像这样使用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
会更容易,那么您可以使用{{1}直接比较这两个值或没有所有这些铸造。