![]() |
1
7
这里有一个只支持SQL的解决方案。我在列中使用了日期时间。在我看来,把时间分开储存是一个错误,因为当时间过了午夜,你就会遇到问题。不过,如果需要的话,你可以调整它来处理这种情况。解决方案还假定开始和结束时间不为空。同样,如果情况并非如此,您可以根据需要进行调整。 解决方案的一般要点是获取所有不与任何其他跨度重叠的开始时间,获取所有不与任何跨度重叠的结束时间,然后将两者匹配在一起。 结果与您期望的结果相匹配,但有一种情况除外,这种情况下,手工检查似乎在您的预期输出中有错误。在第6天应该有一个跨度在2009-06-06 10:18:45.000结束。
|
![]() |
2
4
在
同样的决定
执行此操作的功能如下:
自从
在测试
注意中的附加条件
这似乎是多余的,但它实际上是一个粗糙的过滤器,用于创建索引
|
![]() |
3
3
类似问题如下: Min effective and termdate for contiguous dates fwiw i up投票推荐了Joe Celko的SQL for Smarties,第三版——重复:第三版(2005)——讨论了各种方法、设置基础和过程。 |
![]() |
4
2
假设你:
执行以下操作:
|
![]() |
5
1
这里有一个递归的CTE解决方案,但是我可以自由地为每一列指定日期和时间,而不是单独提取日期。有助于避免一些混乱的特殊情况代码。如果必须单独存储日期,我将使用CTE视图使其看起来像两个日期时间列,并使用此方法。 创建测试数据:
递归CTE:
给出输出:
|
![]() |
6
0
为了帮助回答问题,以下是问题中给定的示例数据,这些示例数据位于类似hainstech的表变量中:
|
![]() |
7
0
在Mahler5的回答上,我写了一个对DateTools的快速扩展。到目前为止,它已经通过了我所有的测试。
|