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

Sql DateDiff如果enddate为空,则使用当前日期,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在计算两个日期和返回天数,但不包括周末和节假日。我还想说,如果enddate为null,那么使用当前日期 如何使用datediff实现这一点 或使用此 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

我正在计算两个日期和返回天数,但不包括周末和节假日。我还想说,如果enddate为null,那么使用当前日期

如何使用datediff实现这一点

或使用此

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

搜索说明如何在SQL中计算工作日的答案。对于第二部分,您可以使用IF或CASE语句将NULL更改为当前日期。ISNULLEndDate,GetDate您不能使用SQL Server计算假日。你需要写你自己的逻辑。对于周末,使用DATEPARTDW,-它将在周日返回0,周六返回7,假设您所在的周末。要替换空值,请查找COALESCE函数。发布您迄今为止尝试过的内容。只是为了澄清@EdGibbs:DATEPART函数将返回从1到7的日期,如果星期天返回1而不是0。谢谢@alejandrozuleta;你说得对-我的大脑放屁: