Вот мой код, но его показ нулевой, а сегодня в пятницу. Но я хотел бы получить последний рабочий день.Последний рабочий день показывает нулевое время, пока на выходных
-- Insert statements for procedure here
--Below is the param you would pass
DECLARE @dateToEvaluate date=GETDATE();
--Routine
DECLARE @startDate date=CAST('1/1/'+CAST(YEAR(@dateToEvaluate) AS char(4)) AS date); -- let's get the first of the year
WITH
tally(n) AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))-1 FROM sys.all_columns),
dates AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS dt_id,
DATEADD(DAY,n,@startDate) AS dt,
DATENAME(WEEKDAY,DATEADD(DAY,n,@startdate)) AS dt_name
FROM tally
WHERE n<366 --arbitrary
AND DATEPART(WEEKDAY,DATEADD(DAY,n,@startDate)) NOT IN (6)
AND DATEADD(DAY,n,@startDate) NOT IN (SELECT CAST(HolidayDate AS date) FROM Holiday)),
curr_id(id) AS (SELECT dt_id FROM dates WHERE [email protected])
SELECT d.dt
FROM dates AS d
CROSS JOIN
curr_id c
WHERE d.dt_id+1=c.id
Можете ли вы более четко указать, что именно вы пытаетесь вычислить? –
Для вас любезная информация, я использую этот запрос для получения последнего рабочего дня. но в то время как его рабочий день показывает нулевое значение, поэтому мой отчет не работает в будние дни, как в пятницу. –
Боюсь, я до сих пор не понимаю. Вы пытаетесь рассчитать предыдущий день недели (с понедельника по пятницу) с учетом ввода даты? Такое, что ввод 2015-03-20 будет производить 2015-03-19, а ввод 2015-03-23 будет производить 2015-03-19? –