mysql如何将日期拆分为已知的时间间隔,并将其转换为行?

xghobddn  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(428)

如何将选定的日期值拆分为多行,例如,使用到现在为止的已知间隔?我可以使用递归cte来实现,但是mysql aurora(rds)不提供支持。
拿一个结果来说

|--|----------|
|id|createdAt |
|--|----------|
|1 |2018-01-01|
|--|----------|

如果间隔7天,查询应输出如下数据:

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

t98cgbkg1#

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

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

另请参见如何用日期范围填充表?

mccptt67

mccptt672#

我会用临时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);

相关问题