如何在sql server中将指定的日期范围拆分为月度,并循环执行每个月以执行某些操作

时间:2015-10-20 16:22:33

标签: sql sql-server

如果日期是2015年1月1日至2016年1月1日,请说明

我希望以月为单位格式化这些日期,然后在游标中的变量中使用它们来循环

例如,每月日期应为2015年1月1日和2015年1月31日,并在2个变量中使用这两个值并进行循环,直到它永远不会结束整个日期范围,即01/01/2016

1 个答案:

答案 0 :(得分:0)

首先创建一个数字表。这个数字代表几个月,几天,你需要的任何东西。

SELECT TOP 10000 N=IDENTITY(INT, 0, 1)
INTO dbo.Numbers
FROM master.dbo.syscolumns a CROSS JOIN master.dbo.syscolumns  b;

我建议您阅读此帖以获取更多信息https://dba.stackexchange.com/questions/11506/why-are-numbers-tables-invaluable

然后创建月度日期列表

    declare @DateIni datetime, @DateEnd datetime

    set @DateINI='20150101'
    set @DateEnd='20160101'

    select DATEADD(m,n,@dateini) as 'month' from Numbers 
    where n<=DATEDIFF(mm,@dateini,@DateEnd)

和每日日期(注意我将DATEADD参数从'mm'更改为'dd')

declare @DateIni datetime, @DateEnd datetime

set @DateINI='20150101'
set @DateEnd='20150131'

select DATEADD(dd,n,@dateini) as 'month' from Numbers 
where n<=DATEDIFF(dd,@dateini,@DateEnd)