mysql - SQL - 查询 session 室

标签 mysql sql sql-server tsql

我需要帮助来创建查询以在所选时间段内已有 session 时返回。

我有表 rep_reuniao具有以下设计

  ID           --> int
  ROOM         --> int
  DATE_BEGIN   --> DATETIME
  DATE_END     --> DATETIME

现在在表 rep_reuniao 中插入一行看起来像这样

 ID            --> 1
 ROOM          --> 2
 DATE_BEGIN    --> 2014-02-21 17:00:00
 DATE_END      --> 2014-02-21 18:00:00

我将创建一个 Jquery Ajax 脚本来返回 truefalse基于所选日期时间的 JSON 响应。

所以查询将有 ROOM , DATE_BEGIN采用这种格式 2014-02-21 17:00DATE_END同样的格式 2014-02-21 18:00

我检查了其他回复,但其中大部分是显示可用房间的查询。在我的设计中,一个房间总是可用的,除非在 table 上有一个寄存器。

Example 1

房间 1已从 2014-02-21 17:00:00 开始使用至 2014-02-21 18:00:00

如果用户在以下位置选择房间,则需要创建一个查询以返回一个值(任何值):

BEGIN = 2012-02-21 16:30:00 
END = 2012-02-21 17:30:00

看到了吗?表中使用的房间从 17:00 开始,所以如果用户选择的开始时间相同,今天我的查询很容易返回一个值。但是用户选择的结束日期在已经使用的时间之间。

嗯,查看开始日期和结束日期,用户选择的时间无法使用。我现在没有想法,任何人都可以帮助我吗?

您需要检查一个日期范围是否与另一个日期范围重叠。

New Date Range =               |-----------|
Test1          =      |=====|
Test2          =            |=====|
Test3          =                  |=====|
Test4          =                        |=====|
Test5          =                              |=====|
Test6          =            |=================|

只有 Test1 和 Test5 不重叠。

抱歉,如果有任何英文错误。如果有人能够修复,我将不胜感激。

最佳答案

关于重叠时间范围的正确逻辑是,当这两个条件都为真时,两个时间范围重叠:

  • 第一个在其他结束之前开始
  • 一个开始后一个结束

在SQL中,这些很容易表达:

SELECT r.* 
FROM rep_reuniao r
WHERE @UserBegin <= r.DATE_END AND
      @UserEnd >= r.DATE_BEGIN;

请注意,当在指定时间范围内举行多个 session 时,这可能会返回多行。

如果您想要 true/false 或 0/1,则使用聚合和 case:

SELECT (case when count(*) = 0 then 'false' else 'true' end) as HasOverlappingRooms
FROM rep_reuniao r
WHERE @UserBegin <= r.DATE_END AND
      @UserEnd >= r.DATE_BEGIN;

关于mysql - SQL - 查询 session 室,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21977126/

相关文章:

php - 存储过程不返回数据

php - 在mysql查询中获取匹配的列值

PHP elasticsearch 部分匹配

mysql:选择以 2012-02* 开头的所有字段

mysql - mysql程序循环中的问题

mysql - 从其他表查询检查状态

sql-server - AppPoolIdentity 如何访问远程 SQL Server 数据库?

sql - 为什么 Microsoft SSMS 语法突出显示单词 "configuration"?

MySQL查询,如何更好地优化它

sql - sql server中两个连续日期之间的差异(以天为单位)