在SQL Server中生成日期范围
在SQL Server中,填充表中两个给定日期之间的日期范围的任务可以使用多种方法简化。一种有效的方法是利用数字表或计数表来生成一系列整数。
根据请求填充'2011-09-01'和'2011-10-10'之间日期的表,可以实现以下解决方案:
<code class="language-sql">DECLARE @StartDate DATE = '20110901' , @EndDate DATE = '20111010' 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)</code>
这段代码生成从1到开始日期和结束日期之间差值的整数列表。通过从每个整数中减去1并将其添加到开始日期,它会生成一个从'2011-09-01'开始到'2011-10-10'结束的日期表。
或者,可以使用基于零的计数表来简化计算:
<code class="language-sql">CREATE TABLE [dbo].[nbrs]( [nbr] [INT] NOT NULL ) ON [PRIMARY] INSERT INTO dbo.nbrs (nbr) SELECT nbr-1 FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY c.object_id ) AS nbr FROM sys.columns c ) nbrs DECLARE @StartDate DATE = '20110901' , @EndDate DATE = '20111010' SELECT DATEADD(DAY, nbr, @StartDate) FROM nbrs WHERE nbr <= DATEDIFF(DAY, @StartDate, @EndDate)</code>
通过在数据库中永久存储数字表,您可以将其重用于将来的查询,从而无需子查询和递归,确保性能和效率。
以上是如何在 SQL Server 中生成两个给定日期之间的一系列日期?的详细内容。更多信息请关注PHP中文网其他相关文章!