栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

比较日期范围

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

比较日期范围

这是一个经典问题,如果您逆转逻辑,实际上会更容易。

让我举一个例子。

我将在此处发布一个时间段,以及其他时间段的所有不同变体以某种方式重叠。

|-------------------|          compare to this one    |---------|     contained within|----------|        contained within, equal start        |-----------|          contained within, equal end|-------------------|          contained within, equal start+end     |------------| not fully contained, overlaps start        |---------------|      not fully contained, overlaps end     |-------------------------|          overlaps start, bigger|-----------------------|      overlaps end, bigger     |------------------------------|     overlaps entire period

另一方面,让我发布所有不重叠的内容:

|-------------------|          compare to this one     |---|          ends before|---|    starts after

因此,如果您简单地将比较简化为:

starts after endends before start

那么您将找到所有不重叠的部分,然后找到所有不匹配的期间。

对于最后一个NOT IN LIST示例,您可以看到它与这两个规则匹配。

您需要确定以下时段是否在您的范围之内或之外:

|-------------|   |-------| equal end with start of comparison period   |-----|   equal start with end of comparison period

如果您的表具有名为range_end和range_start的列,则以下是一些简单的SQL来检索所有匹配的行:

SELECt *FROM periodsWHERe NOT (range_start > @check_period_endOR range_end < @check_period_start)

请注意其中的 NOT 。由于这两个简单的规则找到了所有 不匹配的 行,因此简单的NOT会将其反转为:
如果它不是不匹配的行之一,则必须是匹配的行之一

在此处应用简单的逆逻辑来消除NOT,您将得到:

SELECt *FROM periodsWHERe range_start <= @check_period_end      AND range_end >= @check_period_start


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/386916.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号