当前位置: 首页 > 面试题库 >

从两个日期列生成日期范围

穆宾白
2023-03-14
问题内容

源表如下:

Id   start_date   end_date    field1
1    01/03/2019   07/03/2019  text1
2    10/04/2019   15/04/2019  text2

我想得到以下输出:

Id date        field1
1  01/03/2019  text1
1  02/03/2019  text1
1  03/03/2019  text1
1  04/03/2019  text1
1  05/03/2019  text1
1  06/03/2019  text1
1  07/04/2019  text1
2  10/04/2019  text2
2  11/04/2019  text2
2  12/04/2019  text2
2  13/04/2019  text2
2  14/04/2019  text2
2  15/04/2019  text2

我必须使用循环来填充此表吗?

谢谢


问题答案:

您可以使用技巧来connect by查询prior + sys_guid()

select id,start_date + level - 1 as "date", field1 from t 
connect by level <= end_date - start_date  + 1
    and prior id = id
and prior sys_guid() is not null;

演示



 类似资料:
  • 问题内容: 我需要生成两个给定日期之间的所有日期。只要只有一个日期范围,此方法就可以正常工作。但是,如果我有多个日期范围,则此解决方案不起作用。我在这里以及Asktom上都进行了搜索,但是找不到相关的指针/解决方案。 我使用all_objects和CONNECT BY ROWNUM尝试了两种解决方案,但是没有运气。这是问题说明:sqlfiddle 输入 输出 问题答案:

  • 问题内容: 我想运行一个查询 并返回如下数据: 问题答案: 此解决方案不使用 循环,过程或临时表 。子查询会生成最近10,000天的日期,并且可以扩展为任意向前或向后的日期。 输出: 性能说明 在这里对其进行测试,其性能令人惊讶地良好: 上面的查询花费了0.0009秒。 如果我们扩展子查询以生成近似值。100,000个数字(因此约有274年的日期),运行时间为0.0458秒。 顺便说一句,这是一种

  • 问题内容: 我需要填充一个表,该表将存储2个给定日期之间的日期范围:09/01/11-10/10/11 因此,在这种情况下,该表将从2011年9月1日开始存储,直到每天存储到10/10/11,我想知道在SQL Server中是否有一种巧妙的方法-我目前正在使用SQL Server 2008 。 谢谢 问题答案: 在SQL 2005+上很容易;如果您有数字表或理货表,操作会更容易。我在下面伪造了它:

  • 问题内容: 我需要一个查询,该查询将输出两个给定日期之间的日期列表。 例如,如果我的开始日期是2016年2月23日,结束日期是2016年2月3日,我期望获得以下输出: 另外,我只需要使用SQL进行上述操作(不使用“ WITH”语句或表)。请帮忙。 问题答案: 我使用的通常是DB2 for iSeries,所以我将为您提供一个仅适用于它的SQL解决方案。目前,我无法访问服务器,因此该查询未经测试,但

  • 问题内容: 我想运行一个查询 并返回如下数据: 问题答案: 此解决方案不使用 循环,过程或临时表 。子查询会生成最近10,000天的日期,并且可以扩展为任意向前或向后的日期。 输出: 性能说明 在这里对其进行测试,其性能出奇地好: 上面的查询花费了0.0009秒。 如果我们扩展子查询以生成近似值。100,000个数字(因此约有274年的日期),运行时间为0.0458秒。 顺便说一句,这是一种非常可

  • 我有两个约会:第一次和最后一次。考虑到这个月,我需要能够快速获得所有的过渡日。问题是日期中的每个数字都是由一个变量引起的。原因是我使用了带范围的日期选择器,但所有值都是单独给出的(比如startDay、startMonth、startYear和endDay、endMonth、endYear)。所以,我需要得到这些日期之间的所有日期。它一定是这样的: 看看这个:2018年3月1日。 解决方案: 谢谢