MySQL 如何将日期拆分为已知间隔并按行进行转换?

MySQL how to split a date into known intervals and transform it in rows?

如何将选定的日期值拆分为多行,例如直到现在为止的已知间隔?我可以使用 Recursive CTE 来完成,但是 MySql Aurora(RDS) 不提供支持。

例如:获取像

这样的单个结果
|--|----------|
|id|createdAt |
|--|----------|
|1 |2018-01-01|
|--|----------|

给定 7 天的间隔,查询应输出如下数据:

|----------|
|clycles   |
|----------|
|2018-01-01|
|2018-01-08|
|2018-01-15|
|2018-01-22|
|...       |
|----------|

我会为此使用临时 table

DELIMITER //
CREATE PROCEDURE `increment_date_till_now`(
    IN `date_start` DATE,
    IN `day_interval` INT
)
BEGIN
  CREATE TEMPORARY TABLE `__increment_days` (`date` DATE NOT NULL);
  SET @dt = date_start;
  INSERT INTO `__increment_days` VALUES (@dt);
  WHILE (@dt := @dt + INTERVAL day_interval DAY) < CURRENT_DATE() DO
    INSERT INTO `__increment_days` VALUES (@dt);
  END WHILE;
  SELECT * FROM `__increment_days`;
  DROP TABLE `__increment_days`;
END//

然后

CALL increment_date_till_now('2018-01-01', 7);

如果您在 d 列中有一个(可能是临时的)table 所有可能的日期,您可以

SELECT whatever, d FROM somewhere 
JOIN dates 
WHERE d BETWEEN createdAt AND CURRENT_DATE() 
AND MOD(DATEDIFF(d, createdAt),7)=0

另见 How to populate a table with a range of dates?