月亮显示

时间:2009-12-04 11:39:38

标签: 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

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:2)

你可以尝试使用Sql Server 2005

这样的东西
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

答案 1 :(得分:0)

这是page with SQL Server datetime formats。您可以使用它:

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'

显示在该时间范围内结束或开始的行。

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

set dateformat 'mdy'
select cast('12/31/2009' as datetime)