在SQL – Oracle中查找匹配的间隔

前端之家收集整理的这篇文章主要介绍了在SQL – Oracle中查找匹配的间隔前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一张桌子:

表:

start         end
1 Jan 09    31 Jan 2009
1 Feb 09    28 Feb 2009
1 Mar 09    31 Mar 2009
1 Apr 09    01 May 2009
1 May 09    31 May 2009
1 Jun 09    01 Jul 2009
1 Jul 09    31 Jul 2009
1 Aug 09    31 Aug 2009
1 Sep 09    01 Oct 2009
1 Oct 09    31 Oct 2009
1 Nov 09    01 Dec 2009
1 Dec 09    31 Dec 2009
1 Jan 10    31 Jan 2010
1 Feb 10    03 Mar 2010
1 Mar 10    31 Mar 2010
1 Apr 10    01 May 2010
1 May 10    31 May 2010
1 Jun 10    01 Jul 2010
1 Jul 10    31 Jul 2010
1 Aug 10    31 Aug 2010
1 Sep 10    01 Oct 2010
1 Oct 10    31 Oct 2010
1 Nov 10    01 Dec 2010
1 Dec 10    31 Dec 2010
1 Jan 09    31 Mar 2009
1 Apr 09    30 Jun 2009
1 Jul 09    01 Oct 2009
1 Oct 09    31 Dec 2009
1 Jan 10    31 Mar 2010
1 Apr 10    30 Jun 2010
1 Jul 10    01 Oct 2010
1 Oct 10    31 Dec 2010
1 Jan 09    31 Dec 2009
1 Jan 10    31 Dec 2010

以上内容包含2009年,2010年的每个月,季度和年度.

我有另外一个表,其中包括

表2

start       end
15-12-09    31-12-09
15-01-12    31-12-13
01-01-11    31-12-13
30-01-98    31-12-13
01-01-98    31-12-13
01-01-98    31-12-13
23-12-12    31-12-13
12-11-11    31-12-13
01-01-10    31-12-13

对于表2中的每个条目,我需要找到它落入table1的可能时间范围.

例如从table2,第一个入口 –

15-12-09    31-12-09

落到:

1 Dec 09    31 Dec 2009
1 Oct 09    31 Dec 2009
1 Jan 09    31 Dec 2009

在Oracle sql中是否可以识别它?

解决方法

简单之间应该有帮助.

首先使用两个语句来检查table1的start_date是否在table1的时间范围内,其次之间将检查table2的end_date是否也在table1的同一时间范围内.两个检查应该同时保留,所以你应该使用它们之间.

另外,作为一个包容性的“之间”的作品如下:第一个参数
它检查>或=并且对于第二参数<或=. 所以以下语句是等价的:

t2.start_date between t1.start_date and t1.end_date

t2.start_date >= t1.start_date and t2.start_date <= t1.end_date

您正在寻找的sql将如下:

select t2.*,'->',t1.* from table2 t2,table1 t1
  where t2.start_date between t1.start_date and t1.end_date
    and t2.end_date between t1.start_date and t1.end_date
原文链接:https://www.f2er.com/mssql/76095.html

猜你在找的MsSQL相关文章