1

我有一张假期表,因为我需要返回最后一个工作日期。

Table_holiday

Id Date        Text
1  2013-03-29  Good Friday
2  2013-05-01  Maharashtra day
3  2013-05-02  Holiday 

当我执行我的date_recursive函数时,它应该检查并返回我的last_business日期

For example

如果我执行它@date datetime = '2013-03-29'应该返回我last working date '2013-03-28',因为这是最后一个工作日期

对 sql 中的新手有任何帮助。

4

3 回答 3

3

请试试:

DECLARE @Table_holiday as TABLE(id int, [date] datetime, [Text] nvarchar(50))
insert into @Table_holiday values(1, '2013-03-29', 'Good Friday')
insert into @Table_holiday values(2, '2013-05-01', 'Maharashtra day')
insert into @Table_holiday values(3, '2013-05-02', 'Holiday')

declare @date datetime
set @date ='2013-03-29'

;with T(dt) as
(
    select @date union all
    select T1.[date] from T inner join @Table_holiday T1 on T1.[date]=T.dt-1
)select min(dt)-1 from T
于 2013-04-23T09:47:42.943 回答
3

假设假期表中没有的任何日期都是工作日期,您可以向后搜索,直到找到非假期。

;with cte(adate) as (
    select @date
    from table_holiday
    where @date = Date
    union all
    select h.Date
    from cte
    join table_holiday h on dateadd(d,-1,cte.adate) = h.Date
)
select isnull((select dateadd(d,-1,min(adate)) from cte), @date);
于 2013-04-23T09:49:57.720 回答
0
 select (case when DATEDIFF(day,GETDATE(),'2008-08-05')<2 Then "last
 working date" Else "" END) from Table_holiday

希望它有帮助。

于 2013-04-23T09:47:55.303 回答