我是在这样的情况下,我想匹配一个日期范围与另一个日期范围,这可能是简单的,但我被困在它。
下面是表格结构
表-生命周期
下面是一些记录
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查询来完成这一任务?
任何帮助都是非常感谢的。
发布于 2013-08-23 12:35:31
这个查询应该这样做:
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列上的任何可能的索引。
发布于 2014-02-13 14:31:13
这可能对你有帮助。
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因此,根据结果,您可以检查日期是否介于现有日期范围之间。
发布于 2013-08-23 13:03:51
所以你想要排除那些在2013年08年01日之前结束的生活,以及那些在2014年01月01日之后还没有开始的生活。这应该是可行的:
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'))https://stackoverflow.com/questions/18402934
复制相似问题