我有一个日期范围列表,我想获得这些日期范围内所有月份的列表。我可以像这样查询我的日期范围:
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查询,那就太棒了。
答案 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没有(还)包含行生成器的限制,因此需要一种解决方法。
此致
詹姆斯