SQL Server 2008中的日期明智报告

时间:2013-11-28 12:20:33

标签: sql-server-2008

如何获得以下输出?

[1],[2],[3],[4],[5],[6],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17]
,[18],[19],[20]
,[21],[22],[23],[24],[25],[26],[27],[28],[29],[30]

需要在sql server

中获取给定月份的所有日期

我想显示每日日期明智报告

示例: 如果我将日期传递给'11 / 01/2012'那么它应该返回上面的结果 如果我过了12月而不是31天。

3 个答案:

答案 0 :(得分:0)

非常不明确的问题但请尝试

DECLARE @epoch DATETIME = '20130101'

;WITH cte AS
(
    SELECT @epoch DateKey
    UNION ALL
    SELECT DATEADD(D, 1, DateKey)
    FROM cte
    WHERE MONTH(DATEADD(D, 1, DateKey))=MONTH(@epoch)
)

SELECT * FROM cte

答案 1 :(得分:0)

尝试以下代码

declare @date datetime = '09/10/2012'
declare @noofdays int 

select  @noofdays =datediff(day, @date, dateadd(month, 1, @date))

DECLARE @startDate DATETIME=CAST(MONTH(@date) AS VARCHAR) + '/' + '01/' +  + CAST(YEAR(@date) AS VARCHAR) -- mm/dd/yyyy
DECLARE @endDate DATETIME=  CAST(MONTH(@date) AS VARCHAR) + '/' + cast(@noofdays as varchar) +  '/' + CAST(YEAR(@date) AS VARCHAR)


;WITH Calender AS 
(
SELECT @startDate AS CalanderDate
UNION ALL
SELECT CalanderDate + 1 FROM Calender
WHERE CalanderDate + 1 <= @endDate
)
SELECT [Date] = CONVERT(VARCHAR(10),CalanderDate,25) 
FROM Calender
OPTION (MAXRECURSION 0)

答案 2 :(得分:0)

我能够找到自己的答案.... 感谢Buddy试图帮助我...

DECLARE @COLSPIVOT AS NVARCHAR(MAX)=''
declare @MaxDate int 
set @MaxDate=(SELECT day(DATEADD(ms,-2,DATEADD(MONTH, DATEDIFF(MONTH,0,'8/1/2013')+1,0))) 
AS [Current Month])
    declare @i int =1
    while (@i<=@MaxDate)
    begin
        set @COLSPIVOT=@COLSPIVOT+'['+convert(varchar(10),@i)+']'
        if(@i!=@MaxDate)
        begin
            set @COLSPIVOT=@COLSPIVOT+','
        end
        set @i=@i+1
    end 
select @COLSPIVOT