求判断两个时间段有没有重叠的算法

Powertion 2011-01-11 11:28:43
假设时间段一为t1~t2,时间段二为t3~t4

SQL解决不了,程序语言算法也可,也可以考虑下跨日问题

我这个写法有问题
(t3<=t1 and t4>=t1) or
(t3<=t2 and t4>=t2) or
(t3>=t1 and t4<=t2) or
(t3<=t1 and t4>=t2)
...全文
287 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
feilniu 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dlut_liuq 的回复:]

判断是否重叠
只需判断t3<=t2 and t4>=t1
[/Quote]

t2 <= t3 and t1 <= t4

嗯,这个写法够简洁。
飘零一叶 2011-01-11
  • 打赏
  • 举报
回复
CREATE TABLE T1
(
id int,
t1 DATETIME,
t2 DATETIME
)

CREATE TABLE T2
(
id int,
t3 DATETIME,
t4 DATETIME
)

INSERT INTO T1
SELECT 1,GETDATE(),GETDATE()+10 union all
SELECT 2,GETDATE(),GETDATE()+10

INSERT INTO T2
SELECT 1,GETDATE()+5,GETDATE()+15 union all
SELECT 3,GETDATE()+15,GETDATE()+20

--找出重叠数据
SELECT A.t1,A.t2,B.t3,B.t4
FROM T1 A join T2 B on A.id=B.ID
WHERE B.t3<=A.t2 AND B.t4>=A.t1
/*
--------------------------------------------------------
t1 t2 t3 t4
2011-01-11 11:44:48.557 2011-01-21 11:44:48.557 2011-01-16 11:44:48.610 2011-01-26 11:44:48.610
*/
feilniu 2011-01-11
  • 打赏
  • 举报
回复
t1 BETWEEN t3 AND t4 OR
t3 BETWEEN t1 AND t2
飘零一叶 2011-01-11
  • 打赏
  • 举报
回复
判断是否重叠
只需判断t3<=t2 and t4>=t1
dawugui 2011-01-11
  • 打赏
  • 举报
回复
t1 between t3 and t4 or
t2 between t3 and t4 or
t3 between t1 and t2 or
t4 between t1 and t2
xuam 2011-01-11
  • 打赏
  • 举报
回复
用坐标画一下就出来了啊!
小潜s 2011-01-11
  • 打赏
  • 举报
回复
如果t2>t1且t4>t3的话

not (t1>t4 or t3>t2)
coleling 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dlut_liuq 的回复:]

引用 8 楼 coleling 的回复:
引用 7 楼 feilniu 的回复:

引用 4 楼 dlut_liuq 的回复:

判断是否重叠
只需判断t3<=t2 and t4>=t1


t2 <= t3 and t1 <= t4

嗯,这个写法够简洁。


简洁倒是简洁,可惜是错的。

3楼正解。

你可以用6楼的数据测一下
[/Quote]

Sorry...

你是对的,我错了...

拜一下
飘零一叶 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 coleling 的回复:]
引用 7 楼 feilniu 的回复:

引用 4 楼 dlut_liuq 的回复:

判断是否重叠
只需判断t3<=t2 and t4>=t1


t2 <= t3 and t1 <= t4

嗯,这个写法够简洁。


简洁倒是简洁,可惜是错的。

3楼正解。
[/Quote]
你可以用6楼的数据测一下
飘零一叶 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 coleling 的回复:]
引用 7 楼 feilniu 的回复:

引用 4 楼 dlut_liuq 的回复:

判断是否重叠
只需判断t3<=t2 and t4>=t1


t2 <= t3 and t1 <= t4

嗯,这个写法够简洁。


简洁倒是简洁,可惜是错的。

3楼正解。
[/Quote]
哪里错了
coleling 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 feilniu 的回复:]

引用 4 楼 dlut_liuq 的回复:

判断是否重叠
只需判断t3<=t2 and t4>=t1


t2 <= t3 and t1 <= t4

嗯,这个写法够简洁。
[/Quote]

简洁倒是简洁,可惜是错的。

3楼正解。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧