循环遍历列,名称几乎相同

时间:2014-07-22 09:40:16

标签: sql oracle10g

我有一张桌子,我必须从中提取一些数据。

列中的列相同,但除了一件事,名称的最后一个,即一个数字。我解释一下:

我这样做了几次startDate和endDate:

startDate1 | endDate1 |startDate2 | endDate2 |startDate3 | endDate3 

等...

而且,我想逐个提取数据 首先是startDate1和endDate1,然后是startDate2和endDate2 ......

所以我做了这样的事情:

 FOR i IN 1..10 LOOP
      IF reg.startDate ||i is not null THEN
--TODO
      END IF;
 END LOOP; 

Reg is是光标上的一行。

当然,这不起作用,因为我们不能像这样连接(我忽略了一个语句)。

如果是循环,我想要的是什么,就像我这样做:

      IF reg.startDate1 is not null THEN
--TODO
      END IF;

      IF reg.startDate2 is not null THEN
--TODO
      END IF;         
      IF reg.startDate3 is not null THEN
--TODO
      END IF;

所以,比如:

 FOR i IN 1..10 LOOP
      IF reg.startDate||i is not null THEN
--TODO
      END IF;
 END LOOP; 

所以我在不同的列中得到了这些数据:

startDate1 | endDate1 |startDate2 | endDate2 |startDate3 | endDate3 

18/07/2013 | 19/07/2013 | 18/08/2013 | 19/08/2013 | 18/09/2013 | 19/09/2013

我想要的是这样的:

FOR i IN 1..10 LOOP
      IF reg.startDate ||i is not null THEN
insert into table (date) values (reg.endDate |i);
      END IF;
 END LOOP; 

听到,我将插入19/07 / 2013,19 / 08 / 2013,19 / 09/2013。

我真的不知道那里有什么不清楚。

这可以用或不连接吗?

问题标题可能有误,但我不知道如何以其他方式在一个标题中提出问题。

1 个答案:

答案 0 :(得分:0)

使用union

Select startDate1, endDate1 FROM YOURTable
UNION  
Select startDate2, endDate2 FROM YOURTable
UNION  
Select startDate3, endDate3 FROM YOURTable

...;