我有一张桌子:
表:
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