anil26595 Ответов: 1

Сотрудник, срок действия которого истекает в ближайшие 60 дней. Использование SQL server


В моей базе данных было два столбца: дата начала и дата истечения срока действия . если подписка сотрудника заканчивается до двух месяцев, так что он должен отправить автоматическое электронное письмо пользователю с уважением ваша подписка заканчивается, пожалуйста, продлите подписку. как написать хранимую процедуру в SQL server.

Что я уже пробовал:

используя sql-запрос, но он не получает вывода.можете ли вы опубликовать пример для этого.

CHill60

Опубликуйте то, что вы пробовали

anil26595

Выберите электронная почта, expirydate от SamplTable где функция datediff(день,expirydate, функции getdate())&ЛТ;=60

1 Ответов

Рейтинг:
1

CHill60

Ваша проблема заключается в том, что вы не думаете о числах, которые выходят из вашего мозга. DATEDIFF расчет.

Рассмотрим этот пример:

declare @SamplTable table (email nvarchar(255), expirydate date)
insert into @SamplTable (email, expirydate) values
('email.1@emailprovider', '14-MAY-2018'),	
('email.2@emailprovider', '13-JUL-2018'),	
('email.2@emailprovider', '13-JUL-2019'),	
('email.3@emailprovider', '15-MAR-2018'),	
('email.4@emailprovider', '14-MAR-2018')	
SELECT email, expirydate, DATEDIFF(day,expirydate, GETDATE()) from @SamplTable
Результаты таковы
email.1@emailprovider	2018-05-14	0
email.2@emailprovider	2018-07-13	-60
email.2@emailprovider	2019-07-13	-425
email.3@emailprovider	2018-03-15	60
email.4@emailprovider	2018-03-14	61
поэтому, когда вы ставите свой фильтр where DATEDIFF(day,expirydate, GETDATE())<=60вы также собираетесь забрать эту дату в 2019 году.

Я предпочитаю думать о датах в будущем как о положительном числе "дней до" - то есть поворачивать время вспять. DATEDIFF ценностей вокруг немного ...то есть
SELECT email, expirydate, DATEDIFF(day,GETDATE(), expirydate) from @SamplTable where DATEDIFF(day, GETDATE(),expirydate)<=60
что дает результаты
email.1@emailprovider	2018-05-14	0
email.2@emailprovider	2018-07-13	60
email.3@emailprovider	2018-03-15	-60
email.4@emailprovider	2018-03-14	-61
Это становится лучше, но теперь я получаю свидания и в прошлом.

Способ обойти это заключается в использовании BETWEEN...
SELECT email, expirydate, DATEDIFF(day,GETDATE(), expirydate) from @SamplTable where DATEDIFF(day,GETDATE(), expirydate) BETWEEN 0 AND 60
что и дает результаты
email.1@emailprovider	2018-05-14	0
email.2@emailprovider	2018-07-13	60