mysql中多个日期范围内的月份列表

时间:2017-08-25 02:51:31

标签: mysql date date-range

我有一个日期范围列表,我想获得这些日期范围内所有月份的列表。我可以像这样查询我的日期范围:

Select id, start, end 
From date_range

此查询将提供以下输出:

1, 01-01-2016, 25-03-2016
2, 26-03-2016, 30-03-2016
3, 30-12-2016, 08-01-2017

现在我想找到一个MySQL查询,它只列出这些日期范围内的所有月份。所以它应该给出以下输出:

01-2016
02-2016
03-2016
12-2016
01-2017

此处已有关于如何获取两个日期之间的月份列表的示例,例如:

但这些示例是关于单个日期范围的,但我有多个日期范围。如果有人能找到我的问题的SQL查询,那就太棒了。

1 个答案:

答案 0 :(得分:0)

这是一个解决方案:

#DROP TABLE IF EXISTS monthTest;
CREATE TABLE monthTest(id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, `start` DATETIME, `end`DATETIME);

INSERT INTO monthTest(`start`, `end`) VALUES
    ('2016-01-01', '2016-03-25'),
    ('2016-03-26', '2016-03-30'),
    ('2016-12-30', '2017-08-01');

SELECT A.`start`, A.`end`, DATE_FORMAT(DATE_ADD(A.`start`, INTERVAL B.help_keyword_id MONTH), '%Y%m') FROM
    monthTest A,
    mysql.help_keyword B
WHERE PERIOD_DIFF(DATE_FORMAT(A.`end`, '%Y%m'), DATE_FORMAT(A.`start`, '%Y%m')) >= B.help_keyword_id
ORDER BY A.id;

请注意,第二个JOIN表中的此查询具有依赖关系,该表必须包含的行数多于任意两个日期之间的最大月数,并且连接字段必须是递增的INTEGER开始这是因为mysql没有(还)包含行生成器的限制,因此需要一种解决方法。

此致

詹姆斯