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

获取每个月的第一个日期SQL Server 2008 R2,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,我需要生成从2000年1月1日到2099年12月31日的每个月的第一个日期 问题:下面的查询在ManagementStudio中工作。但是,它在SSRS中不起作用。不幸的是,我无法创建函数或视图,因为我没有这样做的权限 是否有其他方法可以编写此查询以与SSR一起使用?SSRS不喜欢在我的查询中使用TOP 与顶部相关的错误: TOP或FETCH子句包含无效值 declare @pStartDate date = '01/01/2000' declare @pEndDate date = '12

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

问题:下面的查询在ManagementStudio中工作。但是,它在SSRS中不起作用。不幸的是,我无法创建函数或视图,因为我没有这样做的权限

是否有其他方法可以编写此查询以与SSR一起使用?SSRS不喜欢在我的查询中使用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

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


当你给一个日期加上一个月时,它会保留一天。第30天和第31天是特殊情况,你自己试试。

我只是用一种更简单有效的方式重新排列了你的代码,没有TOP子句:


当你给一个日期加上一个月时,它会保留一天。第30天和第31天是特殊情况,请自己尝试。

尝试这个简单的递归CTE,以获得您想要的:

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

;with FirstDayOfMonth as(
    select @pStartDate as [firstDayOfMonth]
    union all
    select DATEADD(month, 1, [firstDayOfMonth]) from FirstDayOfMonth
    where DATEADD(month, 1, [firstDayOfMonth]) < @pEndDate
)

select * from FirstDayOfMonth
option (maxrecursion 0)

尝试此简单、递归的CTE以获得您想要的:

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

;with FirstDayOfMonth as(
    select @pStartDate as [firstDayOfMonth]
    union all
    select DATEADD(month, 1, [firstDayOfMonth]) from FirstDayOfMonth
    where DATEADD(month, 1, [firstDayOfMonth]) < @pEndDate
)

select * from FirstDayOfMonth
option (maxrecursion 0)

它以什么方式不喜欢它?你有什么错误?请编辑问题并添加错误。有很多方法可以在不使用topPSA的情况下生成日历表:。@Nick.McDermaid added:TOP或FETCH子句包含无效值。它以什么方式不喜欢它?你有什么错误?请编辑问题并添加错误。有许多方法可以在不使用topPSA的情况下生成日历表:。@Nick.McDermaid added:TOP或FETCH子句包含无效值。啊!当我尝试使用递归作为替代查询时,我缺少选项maxrecursion 0。啊!当我尝试使用递归作为替代查询时,缺少选项maxrecursion 0。