2014-03-28 45 views
0

我想知道是否有無論如何數天在SQL Server 2008中的月中有多少......類似的東西給這個Javascript代碼我寫道:計數天

function daysInMonth(month, year) { 
        return new Date(year, month, 0).getDate(); 
       } 

       var dateForApp = new Date(); 
       var MonthForApp = (dateForApp.getMonth() + 1); 
       var yearForApp = dateForApp.getFullYear(); 

       var daysofMonth = new Array(); 

       for (var i = 1; i <= daysInMonth(MonthForApp, yearForApp); i++) { 
        daysofMonth.push(parseInt(i)); 
       } // Resulting in something like this (1,2,3,4,5,6,7,8,9,10,11,12...etc) 

我現在需要弄清楚如何在SQL做到這一點...我到目前爲止有foolowing:

declare @Date datetime 
select @Date = Getdate() 

select datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast(cast(year(@Date) as varchar)+'-'+cast(month(@Date) as varchar)+'-01' as datetime)))) 

,這將讓我知道有多少天有在本月(31),但我現在不太清楚如何得到實際的計數完成...我試圖while循環等,但沒有成功。有沒有人有任何想法或線索,他們可以指向我? (我在搜尋網時沒有發現任何東西)

+0

糾正我,如果我錯了......但該線程告訴我如何獲得該月有多少天? EG:(31)三月...我知道如何得到這個...我現在的是,現在我有我的31,我如何建立一個數組/結果集.. 1,2,3, 4,5,6,7,8,9,10,11 ...... 31 – Mike

+0

在sql – Bobby

+0

中沒有數組@Bobby,我知道這個......但是爲了解釋我需要給你的問題我想創建什麼想法...忘記數組然後...如何使用該信息構建結果集呢? – Mike

回答

1

遞歸CTE可以提供一個天表;

declare @date datetime = '01 feb 1969' 
declare @days int = datediff(day, dateadd(day, 1 - day(@date), @date), 
        dateadd(month, 1, dateadd(day, 1 - day(@date), @date))) 

;with days(day) as 
(
    select 1 as day 
     union all 
    select day + 1 
     from days 
     where day < @days 
) 
select day from days 
1
DECLARE @DaysInMonth INT 
SET @DaysInMonth = 31 

DECLARE @i INT 
SET @i = 1 

DECLARE @temp TABLE([Days] INT) 

WHILE @i <= @DaysInMonth 
BEGIN 
    INSERT INTO @temp 
    VALUES(@i) 
    SET @i = @i + 1 
END 

SELECT * 
FROM @temp 
+0

可能不是最好的做法,但你得到你想要的所有日子 – Bobby