Jam*_*eau 1 sql t-sql sql-server-2008
我试图弄清楚表格中特定ID的任何日期是否重叠.这是我的表的一个例子
ID | EffDate | ExpDate
---------------------------------
1 | 2000-01-01 | 2010-12-31
2 | 2000-01-01 | 2050-12-31
1 | 2011-01-01 | 2011-12-31
1 | 2011-12-31 | 2050-12-31
Run Code Online (Sandbox Code Playgroud)
在TableA我需要检查,以确保没有ID的交叉与"自己",所以没有1的可与其他任何一个相交,但如果EFF和EXP日期与ID 2相交无所谓.
没有找到一个完整的答案只是一个起点.
提前致谢
这会在两个行之间找到ID等于1 的重叠:
declare @TabA table (ID int,EffDate datetime2,ExpDate datetime2)
insert into @TabA(ID,EffDate,ExpDate) values
(1,'20000101','20101231'),
(2,'20000101','20501231'),
(1,'20110101','20111231'),
(1,'20111231','20501231')
select
* --TODO -Pick columns
from
@TabA t1
inner join
@TabA t2
on
t1.ID = t2.ID and
t1.EffDate <= t2.ExpDate and --Play with these
t1.ExpDate >= t2.EffDate and --For Inclusive/Exclusive
t1.EffDate < t2.EffDate
Run Code Online (Sandbox Code Playgroud)
结果:
ID EffDate ExpDate ID EffDate ExpDate
----------- ---------------------- ---------------------- ----------- ---------------------- ----------------------
1 2011-01-01 00:00:00.00 2011-12-31 00:00:00.00 1 2011-12-31 00:00:00.00 2050-12-31 00:00:00.00
Run Code Online (Sandbox Code Playgroud)
您可以使用比较运算符来生成其中一个或两个EffDate以及ExpDate包含或独占边界值.
| 归档时间: |
|
| 查看次数: |
364 次 |
| 最近记录: |