mam*_*esh 22 sql t-sql sql-server-2005
使用日期(包括2个日期参数之间)填充临时表的最简单方法是什么.我只需要每月的第一天约会.
例如,如果@StartDate ='2011-01-01'和@EndDate ='2011-08-01'
然后我希望在表格中返回
2011-01-01
2011-02-01
2011-03-01
2011-04-01
2011-05-01
2011-06-01
2011-07-01
2011-08-01
Run Code Online (Sandbox Code Playgroud)
Gil*_*ilM 24
即使@StartDate不是本月的第一个,这也有效.我假设如果它不是本月的开始,你想要从下个月的第一天开始.否则删除+1:
;WITH cte AS (
SELECT CASE WHEN DATEPART(Day,@StartDate) = 1 THEN @StartDate
ELSE DATEADD(Month,DATEDIFF(Month,0,@StartDate)+1,0) END AS myDate
UNION ALL
SELECT DATEADD(Month,1,myDate)
FROM cte
WHERE DATEADD(Month,1,myDate) <= @EndDate
)
SELECT myDate
FROM cte
OPTION (MAXRECURSION 0)
Run Code Online (Sandbox Code Playgroud)
小智 16
declare @StartDate date = '2014-01-01';
declare @EndDate date = '2014-05-05';
;WITH cte AS (
SELECT @StartDate AS myDate
UNION ALL
SELECT DATEADD(day,1,myDate) as myDate
FROM cte
WHERE DATEADD(day,1,myDate) <= @EndDate
)
SELECT myDate
FROM cte
OPTION (MAXRECURSION 0)
Run Code Online (Sandbox Code Playgroud)
declare @StartDate datetime
declare @EndDate datetime
select @StartDate = '2011-01-01' , @EndDate = '2011-08-01'
select @StartDate= @StartDate-(DATEPART(DD,@StartDate)-1)
declare @temp table
(
TheDate datetime
)
while (@StartDate<=@EndDate)
begin
insert into @temp
values (@StartDate )
select @StartDate=DATEADD(MM,1,@StartDate)
end
select * from @temp
Run Code Online (Sandbox Code Playgroud)
即使@StartDate不是本月的第一天,也可以回到StartDate月初的第一天
这是在SQL 2008 R2中测试的
Declare @StartDate datetime = '2015-03-01'
Declare @EndDate datetime = '2015-03-31'
declare @temp Table
(
DayDate datetime
);
WHILE @StartDate <= @EndDate
begin
INSERT INTO @temp (DayDate) VALUES (@StartDate);
SET @StartDate = Dateadd(Day,1, @StartDate);
end ;
select * from @temp
Run Code Online (Sandbox Code Playgroud)
结果:
DayDate
-----------------------
2015-03-01 00:00:00.000
2015-03-02 00:00:00.000
2015-03-03 00:00:00.000
2015-03-04 00:00:00.000
...
Run Code Online (Sandbox Code Playgroud)