获取每月SQL Server 2008 R2的第一个日期

时间:2018-05-09 22:15:42

标签: sql sql-server tsql sql-server-2008-r2

我需要从2000年1月1日到12月31日生成每个月的第一个日期。

问题:以下查询适用于Management Studio。但是,它在SSRS中不起作用。不幸的是,我无法创建函数或视图,因为我无权访问。

是否有另一种方法可以编写适用于SSRS的查询? SSRS不喜欢在我的查询中使用“TOP”。

与“TOP”相关的错误: TOP或FETCH子句包含无效值。

declare @pStartDate date = '01/01/2000'
declare @pEndDate date   = '12/31/2099'

;With months(DATE, MONTH, YEAR)
as(
    SELECT TOP (DATEDIFF(MONTH, @pStartDate, @pEndDate)+1) 
        TheDate  = DATEADD(MONTH, number, @pStartDate),
        TheMonth = MONTH(DATEADD(MONTH, number, @pStartDate)),
        TheYear  = YEAR(DATEADD(MONTH, number, @pStartDate))
    FROM [master].dbo.spt_values 
    WHERE [type] = N'P' ORDER BY number
)
select cast(DATE as Date) as Date from months

1 个答案:

答案 0 :(得分:1)

我只是以更简单有效的方式重新安排了您的代码,没有TOP子句:

declare @pStartDate date = '01/01/2000'
declare @pEndDate date   = '12/31/2099'    

SELECT DATEADD(MONTH, number, @pStartDate) as Date 
FROM [master].dbo.spt_values 
  WHERE [type] = N'P' 
  AND number < DATEDIFF(MONTH, @pStartDate, @pEndDate)+1
  ORDER BY number 

当您将日期添加一个月时,它会保留当天。第30天和第31天是特殊情况,请亲自尝试。