Отправлять почту каждые N дней в SQL - PullRequest
0 голосов
/ 02 октября 2018

Мне нужно отправить предупреждающее письмо за 14 дней до истечения срока действия сертификатов valid_to, а также отправлять электронные письма каждые 3 дня с момента delay_days.

Таблица сертификатов состоит из:

ID(int) | cert_valid_to(date) | warn_before_days(int) | delay_days(int)
1       | '2019-09-30'        | 14                    | 3

Первое электронное письмо IМожно отправить с помощью этого выбора

select datediff(day, getdate(), c.cert_valid_to) = warn_before_days
from xyz.certificates c

Мне нужно расширить мой выбор с delay_days (int) , но пока не знаете, как.Я думаю, что это можно сделать с помощью операции по модулю.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Я думаю, что это должно сделать это:

DECLARE @today AS DATE = CURRENT_TIMESTAMP

SELECT *
FROM xyz.certificates
WHERE DATEDIFF(DAY, @today, cert_valid_to) <= warn_before_days
AND (warn_before_days - DATEDIFF(DAY, @today, cert_valid_to)) % delay_days = 0

БД Fiddle с тестами

0 голосов
/ 02 октября 2018

Если я правильно вас понял.Вы выполнили запрос non stop с заданием, верно?Вы просто хотите узнать, как проверить электронную почту с вашими критериями.

Попробуйте:

select *
from xyz.certificates c
where datediff(day, getdate(), c.cert_valid_to) >= warn_before_days
and datediff(day, getdate(), c.cert_valid_to) % c.delay_days = 0

% означает средний модуль, что означает getdate() возвращать истину каждые delay_days.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...