sql - 如何使用开始日期和结束日期从 SQL 表中输出按天扩展的行?

标签 sql sql-server tsql date

我使用的是 SQL Server 2012,并且有一个名为 StayInfo 的表。

它具有以下结构(摘录):

Name    ArrDate        DepDate       ID
A       2016-03-29     2016-04-02    100
B       2016-05-10     2016-05-12    250

我想要 T-SQL 查询的以下输出:

Name    Date          ID
A       2016-03-29   100
A       2016-03-30   100 
A       2016-03-31   100
A       2016-04-01   100
A       2016-04-03   100
B       2016-05-10   250
B       2016-05-11   250
B       2016-05-12   250

我面临的主要困难是每天执行拆分所需的 SQL 代码。

最佳答案

您可以使用递归 CTE 或数字表:

with cte as (
      select Name, ArrDate, DepDate, ID
      from t
      union all
      select Name, dateadd(day, 1, ArrDate), DepDate, ID
      from cte
      where ArrDate < DepDate
     )
select Name, ArrDate, ID
from cte;

如果跨度超过 100 天,您可以设置最大递归选项。

关于sql - 如何使用开始日期和结束日期从 SQL 表中输出按天扩展的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46300568/

相关文章:

SQL Server 使用正则表达式查询?

sql - CHECKPOINT 的工作方式与 SQL 中的 COMMIT 相同吗?

MySQL 查询计数和连接

mysql - 使用 LIKE 或 MATCH 的 sql 查询

sql - 我的错误在哪一行?将数据类型 nvarchar 转换为数字时出错

sql-server - Power BI 处理 16gb CSV 文件

sql - 不是 GROUP BY 表达式错误

c# - 我如何使用 System.Data.Sql.SqlDataSourceEnumerator 类来了解可用的 sql 数据源...?

sql - 将不可空列添加到 SQL Server 中的现有表?

sql-server - SQL Server XML 查询错误输出