Sql server 逐月显示

Sql server 逐月显示,sql-server,Sql Server,在使用上述值给出开始日期和结束日期时,需要按照以下格式显示报告 注意:需要单个查询 Start Date: (mm/dd/yyyy) 05/09/2007 End Date: (mm/dd/yyyy) 08/20/2007 请帮我解答这个问题。这是答案。你可以像这样使用它: Start Date End Date 05/09/2007 05/31/2007 06/01/2007 06/30/2007 07/01/2007 07/31/2007 08/01/2007 08/20/2007 显示

在使用上述值给出开始日期和结束日期时,需要按照以下格式显示报告

注意:需要单个查询

Start Date: (mm/dd/yyyy) 05/09/2007
End Date: (mm/dd/yyyy) 08/20/2007
请帮我解答这个问题。

这是答案。你可以像这样使用它:

Start Date End Date
05/09/2007 05/31/2007
06/01/2007 06/30/2007
07/01/2007 07/31/2007
08/01/2007 08/20/2007
显示在该时间范围内结束或开始的行

如果您希望以月-日-年格式输入日期,但您的SQL Server被确认使用其他格式,则可以使用set-dateformat。这只允许您更改会话的设置。对于dmy,其工作原理如下:

select 
    convert(varchar(32), StartDate, 101) as StartDate
,   convert(varchar(32), EndDate, 101) as EndDate
,   ...
from YourTable
where StartDate between '2007-09-05' and '2007-08-20'
or EndDate between '2007-09-05' and '2007-08-20'

您可以使用SQLServer2005尝试类似的方法

set dateformat 'mdy'
select cast('12/31/2009' as datetime)
DECLARE @StartDate DATETIME,
        @EndDate DATETIME

SELECT  @StartDate = '09 May 2009',
        @EndDate = '20 Aug 2009'

;WITH CTE AS(
        SELECT  @StartDate StartDate,
                DATEADD(MM, 1, CAST('01 ' + DATENAME(mm, @StartDate) +' ' + CAST(DATEPART(yyyy, @StartDate) AS VARCHAR(4)) AS DATETIME)) - 1 EndDate 
        UNION ALL
        SELECT  EndDate + 1 StartDate,
                CASE WHEN DATEADD(MM, 1, EndDate + 1) - 1 > @EndDate THEN @EndDate ELSE DATEADD(MM, 1, EndDate + 1) - 1 END EndDate
        FROM    CTE
        WHERE   EndDate < @EndDate
)
SELECT  *
FROM    CTE