如果enddate为null,则DateDiff使用当前日期

时间:2016-01-05 21:16:49

标签: sql sql-server tsql

我正在计算两个日期和返回日但想要排除周末和假期。我还想说,如果enddate为null,那么使用当前日期?

我如何使用datediff做到这一点?

1 个答案:

答案 0 :(得分:1)

或者使用它..

if object_id('tempdb..#Holidays') is not null drop table temp..#Holidays
create table #Holidays(id int identity(1,1),Holiday date)
insert into #Holidays values ('2015-12-25'),('2015-12-28')
set dateformat ymd
declare @StartDate date = '2015-12-01'
declare @EndtDate date = '2015-12-31'
--some times @EndtDate might be NULL so, set to getdate()
set @EndtDate = isnull(@EndtDate,cast(getdate() as date))

declare @Holiday int 
set @Holiday = (select count(*) from #Holidays where Holiday between @StartDate and @EndtDate)

SELECT
   (DATEDIFF(dd, @StartDate, @EndtDate) + 1)
  -(DATEDIFF(wk, @StartDate, @EndtDate) * 2)
  -(CASE WHEN DATENAME(dw, @StartDate) = 'Sunday' THEN 1 ELSE 0 END)
  -(CASE WHEN DATENAME(dw, @EndtDate) = 'Saturday' THEN 1 ELSE 0 END)
  -@Holiday