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
请帮我解决这个问题。
答案 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)