sql - 获取sql中两个日期之间的日期列表

标签 sql sql-server

如何列出下表中两个日期之间的日期

查询

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/

相关文章:

sql-server - 使用 MyModel.objects.raw() 基于 SQL 表值函数的 Django 模型

sql - 自连接查询以查找重复记录

mysql - 同一个表上具有不同 where 子句的两个选择查询

sql - SQL注入(inject)攻击后更新所有SQL Server列

php - MYSQL如何取消选择当前年份

mysql - 通过外键使用辅助表中的数据更新表

sql - 应用程序搜索铁路连接

sql - 如何找到最近的日期?

c# - 将表的列名检索到组合框中

sql - 首先对表中的数据进行数字排序,然后对字符串进行排序(不带 asc 或 desc)