我的问题与这两个问题有关:
- https://stackoverflow.com/questions/17529860/how-to-list-all-dates-between-two-dates/27319120
- https://stackoverflow.com/questions/1378593/get-a-list-of-dates-between-two-dates-using-a-function
但是在我的情况下,我有一个带有 ID、StartDate、EndDate 列的表,我想应用相同的方法(但我想使用整个表而不是 2 天)。
在进入函数之前,我想看看这是否可以通过选择和日期维度表来实现。
基本上我想把它扩展到整个表:
SELECT
t.Id
,dd.[Date]
FROM dbo.DateDimension dd
,dbo.T1 t
WHERE
t.Id = 957
and dd.Date>=t.StartDate and dd.Date <= t.EndDate
我在这里有示例数据 + 所需输出(选择语句):
www.sqlfiddle.com /#!18/0e389/2
您的问题中可能有一些我不明白的地方,但是从外观上看,您所要做的就是删除谓词
t.id = ?
您可以通过使用谓词来缩短查询BETWEEN
,我也更喜欢显式 JOINS 而不是“,”连接:在您的小提琴示例中,您输出 3 个 id。如果您只想要一个子集,您可以使用 IN 谓词:
我相信您正在寻找以下内容,利用您的第二个参考资料中的 TFV:
对于 t 中的每一行,将调用 TVF 并将为 TVF 结果中的每条记录生成一行。
在不使用表格的情况下,在不使用光标的情况下即时获取日期。