Tsql 周末最后一个工作日显示为空

Tsql 周末最后一个工作日显示为空,tsql,Tsql,这是我的代码,但今天是星期五,代码显示为空。但我想得到最后一个工作日 -- 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); --

这是我的代码,但今天是星期五,代码显示为空。但我想得到最后一个工作日

-- 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 dt=@dateToEvaluate)
SELECT d.dt
FROM dates AS d
CROSS JOIN
curr_id c
WHERE d.dt_id+1=c.id

dates表中没有任何星期五日期。将NOT IN 6更改为NOT IN 1、7。这将从日期表中删除星期六和星期日。

下面的代码将选择任何日期并向后走,以查找上一周的日期M-F,该日期不在@holidays表中

declare @currentdate datetime = '2015-03-22'

declare @holidays table (holiday datetime)
insert @holidays values ('2015-03-20')

;with cte as (
  select
    @currentdate k
  union all
  select
    dateadd(day, -1, k)
  from cte
  where 
    k = @currentdate
    or ((datepart(dw, k) + @@DATEFIRST - 1 - 1) % 7) + 1 > 5 --determine day of week independent of culture
    or k in (select holiday from @holidays)
)
select min(k) from cte

你能更清楚地说明你想计算的是什么吗?为了给你一些信息,我用这个查询来获取最后一个工作日的产量。但是,由于这个原因,虽然它的工作日显示空值,但我的报告在工作日不像周五那样工作。恐怕我还是不明白。在给定日期输入的情况下,您是否试图计算前一周的星期一到星期五?输入2015-03-20将生成2015-03-19,输入2015-03-23将生成2015-03-19?谢谢您的回答。但是当今天是星期六或星期天时,会得到空值。对于您的信息,我使用此查询显示最后一个工作日的生产。但是,虽然今天是工作日,但没有显示我的报告。在其他几天,报告工作正常。你想在周六或周日返回什么?实际上,我的代码工作正常。这是最后一个工作日。例如,今天是星期六,我的查询返回2015年3月19日星期四,但当我在星期五执行查询时,它显示空值。星期五是我们的周末。当我在周五访问我的网站时,它显示了该查询的错误,但在其他日子它还可以。如果不是在假期,我想在周四访问。事实上,我的代码工作正常。这是最后一个工作日。例如,今天是星期六,我的查询返回2015年3月19日星期四,但当我在星期五执行查询时,它显示空值。星期五是我们的周末。当我在周五访问我的网站时,它显示了该查询的错误,但在其他日子它还可以。是的,你是对的。你的代码太棒了。它起作用了。非常感谢你。