Нужна помощь в извлечении данных SQL за 2 предыдущих дня - PullRequest
1 голос
/ 09 июля 2019

Мне нужно запускать SQL-скрипт каждую ночь, который извлекает данные за предыдущие 2 дня. Например: 9 июля в 1:00 сценарий запускается и должен извлечь данные с 8 июля и 7 июля. 10 июля в 1:00 он должен извлечь данные с 9 июля и 8 июля и т. Д.

Сценарий функционален в том смысле, что он правильно извлекает данные для фиксированного диапазона дат (включая фактический диапазон дат в сценарии), но я не знаю, как заставить его выполнить часть, написанную за 2 дня.

Выяснить это вне меня! Кто-нибудь может дать руководство?

Использование SQL Server 2014

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Вы можете сделать:

where datecol >= convert(date, dateadd(day, -2, getdate())) and
      datecol < convert(date, getdate())

Тем не менее, я бы очень осторожно отнес эту логику непосредственно в запрос.Я хотел бы создать хранимую процедуру в SQL Server и иметь аргументы @fromdate и @todate.

Затем запланируйте задание, которое выполняет вышеуказанные вычисления и вызывает хранимую процедуру с правильными параметрами.

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

0 голосов
/ 10 июля 2019

Я бы создал три переменные.

  • @ today: текущая дата / время, приведенная к дате, для установки на полночь
  • @ startDate: первая / начальная дата, в которой я бы использовал функцию DATEADD для вычитания двух дней
  • @ endDate: дата окончания, которую вы можете вычесть за 1 секунду с сегодняшнего дня

Это должно дать вам диапазон дат от 2019-07-07 00:00:00.000 до 2019-07-08 23:59:59.000

DECLARE @today DATETIME = CAST(GETDATE() AS DATE);
DECLARE @startDate DATETIME = DATEADD(DAY, -2, @today);
DECLARE @endDate DATETIME = DATEADD(SECOND, -1, @today);

Время обычно очень критично при работе с датами, убедитесь, что ваша начальная дата начинается в начале дня, а ваша конечная дата заканчивается в самом конце дня!

Ваш запрос будет выглядеть так:

SELECT *
FROM my_table
WHERE my_date_column BETWEEN @startDate AND @endDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...