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

标签 sql sql-server

有一些很相似的问题,但又不一样。 我必须解决下一个问题: 来自具有这种结构的表

| DATE_FROM  | DATE_TO    |
|------------|------------|
| 2010-05-17 | 2010-05-19 |
| 2017-01-02 | 2017-01-04 |
| 2017-05-01 | NULL       |
| 2017-06-12 | NULL       | 

我需要得到一个像下面这样的列表

| DATE_LIST  |
|------------|
| 2010-05-17 |
| 2010-05-18 |
| 2010-05-19 |
| 2017-01-02 |
| 2010-01-03 |
| 2010-01-04 |
| 2017-05-01 |
| 2017-06-12 |

如何用 SQL 获取它? SQL Server 2016。

最佳答案

另一种选择是使用 CROSS APPLY 和一个临时计数表

Select Date_List=B.D 
 from YourTable A
 Cross Apply ( 
                Select Top (DateDiff(DAY,[DATE_FROM],IsNull([DATE_TO],[DATE_FROM]))+1) D=DateAdd(DAY,-1+Row_Number() Over (Order By (Select Null)),[DATE_FROM]) 
                 From  master..spt_values n1,master..spt_values n2 
             ) B

返回

Date_List
2010-05-17
2010-05-18
2010-05-19
2017-01-02
2017-01-03
2017-01-04
2017-05-01
2017-06-12

关于sql - 获取几个日期之间的日期列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44244463/

相关文章:

SQL Server View 定义

mysql - 使用单个值更新多行

mysql - php删除脚本

sql - 通过PowerShell ISE从SQL Server更改Export-CSV文件中的语言

sql-server - 用于查找 UDF 上次执行时间的 SQL 查询

mysql - WordPress 是否有可以向 Microsoft SQL 数据库发送数据或从 Microsoft SQL 数据库接收数据的服务/产品/插件

mysql - 将多个表中的特定行复制到sql中的另一个表中

mysql - 使用 INNER join 的 SQL 查询花费的时间太长

sql - 想知道针对特定 Id 的所有可能的父行和子行?

mysql - 如何在 SQL Server 中创建触发器,使用两个表来查找 ASP.NET 中的库存数量