SQL Server如何做这种记录

hyc_music1981 2013-03-08 04:26:28
已知表1, 表2, 其中表2中的每两段时间范围都不会有重叠现象, 怎么得到表3, 3个表内容如下:

表1:
2013-01-01 2013-12-31

表2:
2013-03-01 2013-03-31
2013-05-01 2013-05-31

表3:
2013-01-01 2013-02-28
2013-04-01 2013-04-30
2013-06-01 2013-12-31

提供测试SQL如下:

create table #a(date1 datetime, date2 datetime)
create table #b(sd datetime, ed datetime)
GO

insert into #a values('2013-01-01', '2013-12-31')
insert into #b values('2013-03-01', '2013-03-31')
insert into #b values('2013-05-01', '2013-05-31')


...全文
410 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyc_music1981 2013-03-08
  • 打赏
  • 举报
回复
谢谢, 功能实现了, 但代码着实看不懂...
szm341 2013-03-08
  • 打赏
  • 举报
回复
搞完回家~~

create table #t1(id int identity primary key,dts date,dte date)
create table #t2(id int identity primary key,dts date,dte date)

insert into #t1
select '2013-01-01','2013-12-31'

insert into #t2
select '2013-03-01', '2013-03-31'
union all select '2013-05-01', '2013-05-31'

;with cte as(
select dts,dte From #t1
union all
select dateadd(day,1,dte),dateadd(day,-1,dts) from #t2
)
select a.dts,b.dte from 
(select *,ROW_NUMBER() over(order by dts)rn from cte)a,
(select *,ROW_NUMBER() over(order by dte)rn from cte)b
where a.rn=b.rn

/*
dts        dte
---------- ----------
2013-01-01 2013-02-28
2013-04-01 2013-04-30
2013-06-01 2013-12-31

(3 行受影响)

*/

hyc_music1981 2013-03-08
  • 打赏
  • 举报
回复
看来又没人回答了
hyc_music1981 2013-03-08
  • 打赏
  • 举报
回复
都提前过周末了?

22,301

社区成员

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

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