首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查所选日期范围是否在其他日期范围之间

如何检查所选日期范围是否在其他日期范围之间
EN

Stack Overflow用户
提问于 2013-08-23 12:30:38
回答 3查看 3.4K关注 0票数 0

我是在这样的情况下,我想匹配一个日期范围与另一个日期范围,这可能是简单的,但我被困在它。

下面是表格结构

表-生命周期

  • life_id
  • life_start_date
  • life_end_date

下面是一些记录

代码语言:javascript
复制
1 - 07/23/2013 - 07/24/2013
2 - 07/15/2013 - 07/25/2015
3 - 03/10/2013 - 03/10/2014

现在我想按日期范围搜索这些记录,并想看看在这个范围内是否存在生命;例如,我想找到08/01/2013 - 01/01/2014之间的生命。

与预期的结果一样,它应该选择life#2和life#3

如何使用MySQL查询来完成这一任务?

任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-23 12:35:31

这个查询应该这样做:

代码语言:javascript
复制
SELECT 
    *
FROM
    lifecycles
WHERE
    str_to_date(life_start_date, '%m/%d/%Y') <= '2014-01-01' 
    AND str_to_date(life_end_date, '%m/%d/%Y') >= '2013-08-01';

这基本上意味着生活还没有在你想要的范围结束之前就开始了,而生活在距离开始之前也没有结束。

由于您保留VARCHAR格式的日期,所以需要使用str_to_date函数,这是不好的,因为MySQL无法利用start_date或end_date列上的任何可能的索引。

票数 2
EN

Stack Overflow用户

发布于 2014-02-13 14:31:13

这可能对你有帮助。

代码语言:javascript
复制
SELECT SUM( IF( '2014-01-02' BETWEEN from_date AND to_date, 1, 0 ) ) AS from_exist,
       SUM( IF( '2014-02-12' BETWEEN from_date AND to_date, 1, 0 ) ) AS to_exist
FROM date_range

因此,根据结果,您可以检查日期是否介于现有日期范围之间。

票数 1
EN

Stack Overflow用户

发布于 2013-08-23 13:03:51

所以你想要排除那些在2013年08年01日之前结束的生活,以及那些在2014年01月01日之后还没有开始的生活。这应该是可行的:

代码语言:javascript
复制
SELECT *
  FROM lifecycles as alive
 WHERE NOT EXISTS (
       SELECT 1
         FROM lifecycles as dead
        WHERE dead.life_id = alive.life_id
          AND (str_to_date(life_start_date, '%m/%d/%Y') > '2014-01-01'
           OR str_to_date(life_end_date, '%m/%d/%Y') < '2013-08-01'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18402934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档