如何列出下表中两个日期之间的日期
查询
select * from Vacation
输出
EmpID VStart VacEnd VacType PostDate
362330 2017-10-15 2017-10-19 Sick Leave 2017-10-15
所需输出
EmpID Date VacType
362330 2017-10-15 Sick Leave
362330 2017-10-16 Sick Leave
362330 2017-10-17 Sick Leave
362330 2017-10-18 Sick Leave
362330 2017-10-19 Sick Leave
我尝试使用下面的查询获得所需的输出,但它不起作用
DECLARE @Start DATETIME, @End DATETIME
SELECT @Start='2017-10-15' , @End = '2017-10-19'
;WITH DateList
AS
(
SELECT @Start [Date]
UNION ALL
SELECT [Date] +1 FROM DateList WHERE [Date] <@End
)
SELECT dbo.Vacation.EmpID,[Date], dbo.Vacation.VacType FROM dbo.Vacation INNER JOIN DateList ON DateList.Date = dbo.Vacation.VStart
最佳答案
最简单的方法是创建一个数字表或使用子查询或 CTE 获取数字列表,然后根据假期的开始和结束日期将您的假期表加入到该列表中。
例如,
DECLARE @Vacation TABLE (EmpID INT, VStart DATE, VacEnd DATE, VacType VARCHAR(255));
INSERT @Vacation (EmpID, VStart, VacEnd, VacType) VALUES
(1, '2017-10-15', '2017-10-19', 'Sick Leave'),
(2, '2017-10-15', '2017-10-16', 'Super Fun Happy Vacation');
SELECT Vacation.EmpID,
[Date] = DATEADD(DAY, T.N, Vacation.VStart),
Vacation.VacType
FROM (
SELECT N = ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1
FROM sys.objects
) AS T
JOIN @Vacation AS Vacation
ON DATEDIFF(DAY, Vacation.VStart, Vacation.VacEnd) >= T.N;
关于sql - 获取sql中两个日期之间的日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46763261/