用参数之间的日期填充临时表
用两个日期参数之间(含)的日期填充临时表,包括第一天月份,请考虑以下方法:
第 1 步:创建递归公用表表达式 (CTE)
;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 )
第 2 步:从 CTE
SELECT myDate FROM cte OPTION (MAXRECURSION 0)
示例:
对于 @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
注意:
此方法处理以下情况@StartDate 不是该月的第一天,而是从下个月的第一天开始递归。如果您无论如何都想以 @StartDate 开始,请从 CTE 定义中的内部 SELECT 语句中删除 1。
以上是如何使用两个参数之间的日期填充临时表?的详细内容。更多信息请关注PHP中文网其他相关文章!