【发布时间】:2020-07-30 05:58:49
【问题描述】:
我有一张表,类型为 varchar、varchar、date 和 date:
NAME | ID | FROM | THRU
Bob | A123 | 10/30/2010 | 11/2/2010
Bob | B567 | 10/30/2010 | 11/2/2010
我想添加一个服务日期 (DOS) 列,该列复制行并在 FROM 和 THRU 日期之间的每一天进行迭代,包括 FROM 和 THRU 日期。完成的表格应如下所示:
NAME | ID | FROM | THRU | DOS
Bob | A123 | 10/30/2010 | 11/02/2010 | 10/30/2010
Bob | A123 | 10/30/2010 | 11/02/2010 | 10/31/2010
Bob | A123 | 10/30/2010 | 11/02/2010 | 11/01/2010
Bob | A123 | 10/30/2010 | 11/02/2010 | 11/02/2010
Bob | B567 | 10/30/2010 | 11/02/2010 | 10/30/2010
Bob | B567 | 10/30/2010 | 11/02/2010 | 10/31/2010
Bob | B567 | 10/30/2010 | 11/02/2010 | 11/01/2010
Bob | B567 | 10/30/2010 | 11/02/2010 | 11/02/2010
我看到另一个使用 cte 但没有保留原始日期值并添加 DOS 列的答案。我如何在 SQL Server 中完成此操作?
【问题讨论】:
-
10/30不是datetime的有效值。 datetime 数据类型返回一个精确到 1/300 秒的值,不,好吧,不确定那是什么;月/日(那么,哪一年?),月/年(那么哪一天?)?您拥有的真正价值或真正的数据类型是什么?如果你真的以MM/dd这样的格式存储日期,那么当你从一年到另一年时,这将是不可能的。 -
@Larnu 你是对的。我添加了一个年份值以更清晰,并更改了日期时间。
-
这是一个很好的日历表用例(日历表每个日期都有一行,并且包含所有日期)。网上有很多关于如何快速创建的资源。一旦你有了它,你就可以加入你现有的表,比如
SELECT yourtable.*, calendartable.calendardate FROM yourtable WHERE calendartable.calendardate BETWEEN yourtable.FROM and yourtable.THRU
标签: sql sql-server tsql