【发布时间】:2012-02-26 18:12:59
【问题描述】:
我从一个被问到的 StackOverflow 问题中得到了这个例子,但我无法根据我的需要让它工作。
WITH DateTable
AS
(
SELECT CAST('20110101' as Date) AS [DATE]
UNION ALL
SELECT DATEADD(dd, 1, [DATE]) FROM DateTable
WHERE DATEADD(dd, 1, [DATE]) < cast('20110131' as Date)
)
SELECT dt.[DATE] FROM [DateTable] dt
输入-
ID | FromDate | ToDate
=============================
1 | 2011-11-10 | 2011-11-12
2 | 2011-12-12 | 2011-12-14
输出 -
SN | Dates |
==================
1 | 2011-11-10 |
2 | 2011-11-11 |
3 | 2011-11-12 |
4 | 2011-12-12 |
5 | 2011-12-13 |
6 | 2011-12-14 |
查看此代码适用于静态日期。但就我而言,我有一个包含三列Id, FromDate, ToDate 的表。现在我想将每一行中的每个范围转换为单独的日期。
如果范围来自表,并且显然必须为范围表中的每一行运行此查询,我无法让上面的示例工作,这是另一个令人困惑的挑战。
请帮忙。
【问题讨论】:
-
您是否尝试获取每个 Id 的 FromDate 和 ToDate 之间的所有有效日期?我不确定你想要完成什么。
-
请注意,最大递归默认为 100
标签: sql sql-server-2005 tsql datetime date-range