declare @startTime datetime
,@endTime datetime
, @IntervalIncWeekends int ;
set @startTime = '03/13/2017 11:00:02'
set @endTime = '03/30/2017 19:53:59'
IF DATENAME(dw, @startTime) = 'Saturday'
SET @startTime = CAST(CAST(DATEADD(dd,2,@startTime) AS DATE) AS
DATETIME);
IF DATENAME(dw, @startTime) = 'Sunday'
SET @startTime = CAST(CAST(DATEADD(dd,1,@startTime) AS DATE) AS
DATETIME);
IF DATENAME(DW, @endTime) = 'Saturday'
SET @endTime = DATEADD(MI,-1, CAST(CAST(@endTime AS DATE)
AS DATETIME));
IF DATENAME(DW, @endTime) = 'Sunday'
SET @endTime = DATEADD(MI,-1, CAST(CAST(DATEADD(dd,-1,@endTime) AS
DATE) AS DATETIME));
IF @endTime <= @startTime
BEGIN
SELECT 0;
END
ELSE
BEGIN
DECLARE @NumberofWeekendDays decimal(5,2) = 0;
;WITH cte as (
SELECT CAST(DATEADD(DD,1,@startTime) AS DATE) AS dt
WHERE DATEADD(DD,1,@startTime) < @endTime
UNION ALL
SELECT DATEADD(DD,1,dt)
FROM cte
WHERE DATEADD(DD,1,dt) < @endTime
)
SELECT @NumberofWeekendDays = COUNT(*)
FROM cte
WHERE DATENAME(dw, dt) IN ('Saturday','Sunday');
SELECT ((DATEDIFF(MI,@startTime,@endTime) -
(@NumberofWeekendDays * 60 * 24))/60)/24 m;
END
如何我可以改变这一个SQL函数,这样我可以通过2个日期为参数的功能,并获得回报的时间插入?如何将此代码更改为SQL 2012函数?
是不是只是一个基本的标量函数?你真的尝试过什么吗?至少你应该尝试格式化你的代码更好... –
[坏习惯踢:使用速记日期/时间的操作 - 伯特兰·亚伦(http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/ 20 /坏习惯,对开球使用-速记与 - 日期 - 时间 - operations.aspx) – SqlZim