MySQL检查日期和时间2列

时间:2011-08-05 11:28:42

标签: mysql

检查两个DATETIME列之间是否存在条目时出现问题。 创建按摩预约系统,我列出时间08:00,08:15 08:30,08:45,等等。 我想检查是否有一个插槽,例如从13:00:00到2小时前进。 (这种治疗是120分钟,其他治疗持续90分钟等)。

表格就像这样

|id|event|from_date|to_date|

1 | massage | 2011-08-15 14:00:00 | 2011-08-15 16:00:00

查询

$times_from_date = '2011-08-15 13:00:00';
$times_to_date = '2011-08-15 16:00:00';

SELECT * FROM `wp_byforssell_booking` WHERE '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $from_to_date

它很有效。有什么想法吗?

修改

假设我在上面的数据库中得到了约会。

我想查询2011-08-15 13:45和2011-08-15 15:30之间的所有约会。

这是我的问题。希望这是对问题的更好解释。

修改

我的表现在看起来像这样

id|event|from_date|to_date|

1 | massage(60min) | 2011-08-15 13:30:00 | 2011-08-15 15:30:00

2 | massage(60min) | 2011-08-15 09:00:00 | 2011-08-15 10:00:00

我的查询: 从09:30和11:30选择时间,它不会产生第2行。

SELECT * FROM wp_byforssell_booking WHERE((('2011-08-15 09:30:00' <= from_date)AND('2011-08-15 11:30:00' > from_date)) OR (('2011-08-15 09:30:00' >= from_date)AND('2011-08-15 11:30:00' < to_date)))

4 个答案:

答案 0 :(得分:0)

你有一个错字。您声明了$times_to_date,但您的查询使用了$from_to_date

...BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $from_to_date
    ---------------------------------------------------------------------------------------------^^^^^^^^^^^^^^

应该是:

...BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $times_to_date

答案 1 :(得分:0)

除了迈克尔所指出的,你还要做两次相同的WHERE子句:

... WHERE '". $times_from_date ."' BETWEEN from_date AND to_date OR '". $times_from_date ."' BETWEEN from_date AND to_date ...

其中一个人不应该检查$times_to_date吗?

答案 2 :(得分:0)

如果我理解正确,你想要列出开始时间和结束时间之间有足够时间差的所有桶(在这种情况下是$ times_from_date和$ times_to_date),这样就可以了,我想:

SELECT * FROM wp_byforssell_booking 
WHERE exists 
      (select 1 from wp_byforssell_booking where   
      timestampdiff(HOURS,from_date,to_date)>=
      timestapdiff(HOURS,$times_from_date,$times_to_date)

答案 3 :(得分:0)

要获取与$times_from_date$times_to_date给出的日期时间范围重叠的记录,请使用

之类的查询
SELECT * FROM wp_byforssell_booking WHERE
(
(($times_from_date <= from_date)AND($times_to_date > from_date))
OR
(($times_from_date >= from_date)AND($times_from_date < to_date))
)

您可能必须使用<而不是<=>而不是>= - 这取决于您的逻辑,即如果一个结束于{,则两个事件重叠{1}}和其他内容从2011-08-15 14:00:00开始(IOW需要启动2011-08-15 14:00:00以便不重叠)。