sql-server-2008 - CTE 使用 SQL Server 获取两个日期之间的日期

标签 sql-server-2008

我想获取两个日期之间缺少的日期

@maxDate = '2013-01-28'
@curDate = GetDate()
我已经写了 CTE 来做到这一点。这是我的 CTE:

create procedure EmpDate  
as  begin  
declare @curDate Date  
set @curDate = GETDATE()  
declare @maxDate Date  
select @maxDate = MAX(EmpAttendance.Sdate)  
from EmpAttendance

;with GetDates As  
(  
select 1 as counter, @maxDate as Date   
UNION ALL  
select counter + 1, DATEADD(day,counter,@maxDate)  
from GetDates  
where DATEADD(day, counter, @maxDate) < @curDate  
)  
select Date from GetDates  
end   
go  

这样做的结果是
Date  
2013-01-28  
2013-01-29  
2013-01-30  

但我想要
2013-01-29  
2013-01-30   

请帮帮我。

最佳答案

改变

select 1 as counter, @maxDate as Date


select 1 as counter, DATEADD(day,1,@maxDate) as Date

通过更改 CTE 使其更简单
;with GetDates As  
(  
select DATEADD(day,1,@maxDate) as TheDate
UNION ALL  
select DATEADD(day,1, TheDate) from GetDates  
where TheDate < @curDate  
)
... 

关于sql-server-2008 - CTE 使用 SQL Server 获取两个日期之间的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14626473/

相关文章:

visual-studio-2010 - VS2010 数据库项目部署,是否会丢失数据会失败?

表中每一列的 SQL 循环

sql - 使用 Powershell 从 SQL Server 2008 R2 导出到固定宽度的文本文件

c# - 在 SQL Server 远程访问方面需要帮助

c# - 事务必须在 SQL Server 的存储过程中吗?

sql - LEFT JOIN 根据 WHERE 条件的位置给出不同的数据集

sql - SQL Server 2008-如何使用DELETE触发器更新字段

sql-server-2008 - 与现有主键或 UNIQUE 约束不匹配

c# - SQL Server 2008 - 使用多个关键字和分页的全文搜索

sql - 如何让 SQL Management Studio 看到新表?