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。
我正在尝试编写一个 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。