mysql - x 和 y 值之间有 2 列 mysql

标签 mysql sql

我有以下查询:

SELECT DISTINCT T1.SCHEDULE_START, T1.SCHEDULE_END, T2.SCHEDULE_TYPE_ID, T2.SCHEDULENAME
FROM schedule_intermediate T1 JOIN schedule_type T2 ON T1.SCHEDULE_TYPE_ID = T2.SCHEDULE_TYPE_ID
WHERE (
    SELECT COUNT(*) FROM reservation R JOIN schedule_intermediate SI ON R.SCHEDULEID_GENERATED = SI.SCHEDULEID_GENERATED
    WHERE RESOURCEID = 456 
    AND SI.SCHEDULEID_GENERATED = 4 
    AND R.RESERVATIONDUEDATE = '2014-08-06 07:50:00'
    AND R.RESERVATIONEXPIREDATE = '2014-08-06 08:35:00'
    HAVING T1.SCHEDULE_START != DATE_FORMAT('2014-08-06 07:50:00', '%H:%i:%s')
    AND    T1.SCHEDULE_END != DATE_FORMAT('2014-08-06 08:35:00', '%H:%i:%s')
) = 0
ORDER BY T1.SCHEDULE_START

用于选择不会与其他计划发生冲突的计划。

这会产生:

enter image description here

但是,它从时间表以及 08:35:00 到 09:20 的时段中排除了 7:50:0008:35:00 :00 被排除。

我想排除提供的范围之间的时间段,但是,我需要包括提供的具体时间(07:50:00 和 08 :35:00),只是排除该范围内的分钟(从 7:51:00 - 8:34:00)。

有办法实现这一点吗?

我已经尝试过:

HAVING T1.SCHEDULE_START <= DATE_FORMAT('2014-08-06 07:50:00', '%H:%i:%s')
AND    T1.SCHEDULE_END >= DATE_FORMAT('2014-08-06 08:35:00', '%H:%i:%s') 

但是这个返回 0 列,同样反转符号会产生相同的结果。我想不出任何其他方法可以做到这一点。

最佳答案

您想要排除在指定时间开始或结束的所有结果吗?从你的问题中尚不清楚。如果是,那么相关部分可能是...

AND ( 
      T1.SCHEDULE_START <= DATE_FORMAT('2014-08-06 07:50:00', '%H:%i:%s')
      OR T1.SCHEDULE_START >= DATE_FORMAT('2014-08-06 08:35:00', '%H:%i:%s')
   ) 
AND ( 
      T1.SCHEDULE_END <= DATE_FORMAT('2014-08-06 07:50:00', '%H:%i:%s') 
      OR T1.SCHEDULE_END >= DATE_FORMAT('2014-08-06 08:35:00', '%H:%i:%s')
    )

关于mysql - x 和 y 值之间有 2 列 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100588/

相关文章:

MySQL - 按列值排序,根据其他列分组

java - 数据未插入 MySQL 数据库

sql - 使用相关查询的左连接中的 Where 子句?

sql - 为什么 Oracle 中使用 CASE 进行子选择比 JOIN WITH OR 更快

php - MySql 数据库连接压缩

mysql - 在 Rails 中使用 where 并仅检查第一个元素

Mysql从两个表中选择进行比较

sql查询连接两个服务器中不同数据库的两个表

php - 选择中使用一个字段时模型不返回值

sql - 有值且没有 PostgreSQL 的条件