Вы можете создать переменную и передать ее в подготовленный оператор, как показано ниже.
SET @dateinterval = n;
SET @preparedStatement = CONCAT("
SELECT * FROM `invoices`
WHERE `due_date` IN (
(CURDATE() + INTERVAL ",@dateinterval," day),
(CURDATE() + INTERVAL ",@dateinterval*2," day),
(CURDATE() + INTERVAL ",@dateinterval*3," day)
);
");
PREPARE SQLStatement FROM @preparedStatement;
EXECUTE SQLStatement;
DEALLOCATE PREPARE SQLStatement;
При условии, что вы передадите 5 для @dateinterval, приведенный выше оператор будет разрешен как:
SELECT * FROM `invoices`
WHERE `due_date` IN (
(CURDATE() + INTERVAL 5 day),
(CURDATE() + INTERVAL 10 day),
(CURDATE() + INTERVAL 15 day)
);