У меня есть функция в моей базе данных, которая может выдавать рабочую дату, например, так ...
Скажем, сегодня 3/23/2020 - если я запускаю функцию следующим образом:
select [dbo].[ufGetBusinessDay] (DATEADD(day, -1,GETDATE()) ,'PREVIOUS')
будет отображаться '03 / 20/2020 '(предыдущий рабочий день. Он пропускает выходные)
, если я сделаю что-то вроде
select [dbo].[ufGetBusinessDay] (DATEADD(day, +1,GETDATE()) ,'NEXT')
покажет '03 / 24/2020 '(следующий рабочий день)
Довольно прямо. Это единственная функциональность, которая у него есть. Я не знаю, нужно ли обмениваться кодом, так как он имеет некоторую пользовательскую фильтрацию, не относящуюся к тому, что я делаю. Для моей цели он может только go вернуться к предыдущему рабочему дню и к следующему рабочему дню.
Моя цель - создать фильтр в профайле c, который позволит мне go вернуться на 4 дня обратно так ...
Select * from tbl1 where DateField >=DATEADD(dd,-4,GETDATE()) and DateField < GETDATE()
проблема с функцией заключается в том, что она уходит только на день назад, так что пока это работает в этом сценарии, потому что наша последняя рабочая дата - пятница - 4 days
DECLARE @daysago AS DATETIME
SELECT @daysago= [dbo].[ufGetBusinessDay] (DATEADD(day, -1,GETDATE()),'PREVIOUS')
SELECT DATEADD(DAY,-4,@daysago)
Однако в случае сканарио, где GETDATE () является средой, и я запускаю функцию, которая вернется во вторник, а если мы сделаем DATEADD(DAY,-4,TUESDAY)
, она вернется в воскресенье. Цель здесь состоит в том, чтобы использовать эту функцию, чтобы исключить выходные и фактически go обратно в четверг предыдущей недели.
РЕДАКТИРОВАТЬ: Я даже не уверен, что это можно сделать внутри хранимого про c используя эту функцию. Я думаю, что на самом деле может быть необходимо создать отдельную pro c или функцию для такого рода вещей, когда мы проверяем DATENAME (WEEKDAY, DATE), чтобы определить, выходной ли это, и затем используем функцию, которую я должен go назад. до предыдущего рабочего дня (исключая выходные) с учетом того, сколько дней назад мы уже провели.