MySQL:具有可变 DATE_ADD 间隔的存储过程

MySQL: Stored procedure with variable DATE_ADD intervals

我正在尝试编写一个 MySQL 存储过程,它将根据一个字段 rwo_frequency 的值复制某些 table 行。例如,如果 rwo_frequency = 2,则日期间隔为一周,我的语句将如下所示:

INSERT INTO table (start_date, <other columns>)
SELECT DATE_ADD(start_date, INTERVAL 7 DAY) AS start_date, <other columns>
FROM table
WHERE start_date = DATE_ADD(CURDATE(), INTERVAL -7 DAY)
AND rwo_frequency = 2;

因此,如果 start_date 记录 = '2021-06-04',则该记录将在 2021-06-11 复制,并将该日期作为开始日期。

我遇到的问题是如何将 rwo_frequency 和 DATE_ADD 的时间间隔表示为变量,以便存储过程涵盖 rwo_frequency 的所有值。因此,如果频率是每月 (rwo_frequency = 3),则 DATE_ADD 间隔将自动为 'INTERVAL 1 MONTH'。我怎样才能在我的存储过程中实现这一点?

您可以使用 CASE expression 使该比较的右侧对于 rwo_frequency 的每个相应值具有不同的值。

INSERT INTO table (start_date, <other columns>)
SELECT DATE_ADD(start_date, INTERVAL 7 DAY) AS start_date, <other columns>
FROM table
WHERE start_date = CASE rwo_frequency
    WHEN 2 THEN DATE_ADD(CURDATE(), INTERVAL -7 DAY)
    WHEN 3 THEN DATE_ADD(CURDATE(), INTERVAL -1 MONTH) 
    ...
    END

如果 rwo_frequency 不匹配任何情况,并且您不写 ELSE 情况,则整个表达式的结果为 NULL。