2015-10-20 27 views
0

比方說,如果日期是2015年1月1日至2016年1月1日如何通過每月指定日期範圍,分成在SQL Server和環月明智的執行一些操作

我想這些分裂每月格式明智的日期,然後使用它們在遊標變量循環

例如每月日期應爲2015年1月1日和2015年1月31日,並使用這兩個值在2個變量,並作出循環,直到它永不結束整個日期範圍,即01/01/2016

+1

只需創建一個日期表,其中包含您需要的所有日期作爲行。讓你的生活變得更加簡單 - 甚至當你有一張桌子時,甚至不需要循環 –

+0

任何示例如何做到這一點 – user1030181

+0

只需使用帶日期變量的while循環,並在每次迭代時插入一個新行。你可能會用谷歌找到樣本,但寫起來並不難 –

回答

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參數從「毫米」到'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) 
相關問題