【发布时间】:2020-04-06 14:56:19
【问题描述】:
我有以下示例数据:
CREATE TABLE tblDates
(
ID int,
Dates DATE
);
SELECT * FROM tblDates
INSERT INTO tblDates VALUES(1,'2019-12-01');
INSERT INTO tblDates VALUES(2,'2019-12-05');
INSERT INTO tblDates VALUES(3,'2019-12-02');
INSERT INTO tblDates VALUES(4,'2019-12-09');
INSERT INTO tblDates VALUES(5,'2019-12-11');
在这里,我正在寻找 date 和 ID = 4 之间的日期,以及 1,2,....n 天之间的日期。
尝试 1:我尝试使用 UNION ALL。
SELECT Dates FROM tblDates WHERE ID = 4
UNION ALL
SELECT DATEADD(day,1,Dates) FROM tblDates WHERE ID = 4;
当我正在寻找 50 天或更多天数的差异时,这种方法并不适用。
尝试2:
SELECT Dates FROM tblDates WHERE ID = 4 AND Dates between Dates AND DATEADD(day,1,Dates);
有单身约会。
尝试3:
创建的函数:获取日期的函数
CREATE FUNCTION udf_GetDates(@MinDate DATE,@MaxDate DATE)
RETURNS TABLE
AS
RETURN
SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM sys.all_objects a
CROSS JOIN sys.all_objects b;
查询:
SELECT f.*
FROM udf_GetDates(t.Dates,DATEADD(day,1,t.Dates)) f
INNER JOIN tblDates t ON f.[Date] = t.[Dates]
WHERE t.ID = 4
出现错误:
Msg 4104, Level 16, State 1, Line 2 多部分标识符 无法绑定“t.Dates”。消息 4104,第 16 级,状态 1,第 2 行 无法绑定多部分标识符“t.Dates”。
预期输出:
给定:ID = 4 和 day=+1
Dates
-----------
2019-12-09
2019-12-10
给定:ID = 4 和 day=+10
Dates
-----------
2019-12-09
2019-12-10
2019-12-11
2019-12-12
2019-12-13
2019-12-14
2019-12-15
2019-12-16
2019-12-17
2019-12-18
给定:ID = 4 和 day=-5
Dates
----------
2019-12-05
2019-12-06
2019-12-07
2019-12-08
2019-12-09
【问题讨论】:
-
将
recursive query或join与tally表一起使用
标签: sql-server tsql sql-server-2008-r2