• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

散分,并怎么判断时间段上有重叠冲突

mysql 搞代码 7年前 (2018-05-31) 215次浏览 已收录 0个评论

散分,并如何判断时间段上有重叠冲突。
首先,感谢大家的支持。
终于得到了一颗钻石。已经比 大版 十豆三 老师预计了晚了近一个星期的时间才收获到。

CSDN比去年来说,mysql版出现了许多新的声音,新的面孔,特别是很多来自MS SQL SERVER, ORACLE的数据库方面的专家朋友的积极参与。使用我们在共同的讨论,争论,辩论中不断提高。 在这儿再一次感谢大家的参考和支持。

原本应该在拿到钻的当时就应该按CSDN的惯例放分的,可是一直想不出放个什么小问题。所以拖了好几天,今天刚巧看到这个经常出现的问题。所以提出来以供大家分享参考。

===============================================================================

比如某个会议室的预订信息表 roomBookInfo(id,title,beginTime,endTime), 现在有一个新的预订请求 @bTime, @eTIme 分别 代表 开始、结束时间。

请检查下表中的记录,查看是否有时间上的冲突。

create table roomBookInfo (id int auto_increment primary key, title varchar(10), beginTime datetime not null , endTime datetime not null);

===============================================================================

最后预祝 zuoxingyu 升星

——解决方案——————–
果断SF
——解决方案——————–

SQL code

 select * from roomBookInfo A where exists(select 1 from roomBookInfo B where ( A.begintime>B.begintime and A.begintime<B.endtime ) 
------解决方案--------------------
恭喜狼头
------解决方案--------------------
虽然我很菜,但是还是想试试:

表结构:

SQL code

 -- -- 表的结构 `roomBookInfo` -- -- 创建时间: 2010 年 10 月 15 日 00:01 -- 最后更新时间: 2010 年 10 月 15 日 00:08 -- DROP TABLE IF EXISTS `roomBookInfo`; CREATE TABLE IF NOT EXISTS `roombookinfo` ( `id` int(4) unsigned NOT NULL auto_increment, `title` varchar(10) NOT NULL, `beginTime` datetime NOT NULL, `endTime` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=4 ; -- -- 导出表中的数据 `roomBookInfo` -- INSERT INTO `roomBookInfo` VALUES (1, '会议一', '2010-10-15 00:07:58', '2010-10-15 00:09:06'); INSERT INTO `roomBookInfo` VALUES (2, '会议二', '2010-10-15 00:08:27', '2010-10-15 00:08:33'); INSERT INTO `roomBookInfo` VALUES (3, '会议三', '2010-10-16 00:08:41', '2010-10-17 00:08:44'); 
------解决方案--------------------
找出与 (@btime ,@etime) 有交集的记录,
not (begintime >= @etime or EndTime <= @btime)

也即是 begintime<@etime and Endtime>@btime

------解决方案--------------------
select *
from roomBookInfo
where beginTime<@eTime
and endTime>@bTime;
------解决方案--------------------
很原始的检查方法

SQL code

 select * from roombookinfo where (begintime BETWEEN @btime and @etime) or (endtime BETWEEN @btime and @etime) or (@btime between begintime and endtime) or (@etime BETWEEN begintime and endtime); 
------解决方案--------------------
借狼头大哥的帖子问一个问题(类似的):

由于某种原因,在insert的时候,没有进行时间冲突判断,过后需要判断某段时间是否有冲突,如何判断?

比如存在两条记录,一条是9:00--11:00,一条是10:00--12:00
这样的话,如果我查9:00--12:00这个时间段内是否有冲突,就应该显示有冲突。

谢谢。
------解决方案--------------------
09-11
10-12
就是判断ENDTIME>BEGINTIME,11>10,存在冲突
------解决方案--------------------

------解决方案--------------------
接个分。。还差300多点就一颗星星了。指日可待。
------解决方案--------------------
接分,可以用自连接可以找出有冲突.
------解决方案--------------------
接分...........
------解决方案--------------------


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:散分,并怎么判断时间段上有重叠冲突

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址