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

生成日期范围之间的日期

梁渊
2023-03-14
问题内容

我需要填充一个表,该表将存储2个给定日期之间的日期范围:09/01/11-10/10/11

因此,在这种情况下,该表将从2011年9月1日开始存储,直到每天存储到10/10/11,我想知道在SQL Server中是否有一种巧妙的方法-我目前正在使用SQL Server 2008 。 谢谢


问题答案:

在SQL 2005+上很容易;如果您有数字表或理货表,操作会更容易。我在下面伪造了它:

DECLARE @StartDate DATE = '20110901'
  , @EndDate DATE = '20111001'

SELECT  DATEADD(DAY, nbr - 1, @StartDate)
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS Nbr
          FROM      sys.columns c
        ) nbrs
WHERE   nbr - 1 <= DATEDIFF(DAY, @StartDate, @EndDate)

如果您有一个计数表,则用该表替换子查询。没有递归。



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

  • 我有一张表,上面有房间的开始和结束日期。我写了这个SQL: 这些房间在这段时间内是有效的。但是,当我这样过滤的时候, 我没有结果。这些日期就像一个数组: 所以,你可以看到那个房间在2022-12-30是活动的,但我不能得到它。我怎么能那样做? 希望我能很好地表达自己。

  • 问题内容: 源表如下: 我想得到以下输出: 我必须使用循环来填充此表吗? 谢谢 问题答案: 您可以使用技巧来查询 演示

  • 问题内容: 我的数据库中有以下一组匹配日期的日期(dd / MM / yyyy): 事件具有开始和结束日期(时间无关紧要),并且endDate为NULL表示事件仍在进行中。 我想确定的是两个任意日期之间的日期范围,其中a)没有事件,b)事件重叠。 因此,对于输入日期范围01/04/2009-30/06/2009,我希望得到以下结果: 注意,作为结果,两个相邻的重叠范围是可以接受的。 谁能用SQL算

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

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