Sql server 2008 在ms sql server中查找不包括星期日的工作日数
我们在ms sql server中安装了datediff。 我想找出“工作日”的数量,除了这两天之间的星期日。 e、 g.如果我使用datediffday、'2014-05-01'、'2014-05-31',则应给出不包括星期日在内的天数 有什么办法吗?试试这个Sql server 2008 在ms sql server中查找不包括星期日的工作日数,sql-server-2008,Sql Server 2008,我们在ms sql server中安装了datediff。 我想找出“工作日”的数量,除了这两天之间的星期日。 e、 g.如果我使用datediffday、'2014-05-01'、'2014-05-31',则应给出不包括星期日在内的天数 有什么办法吗?试试这个 declare @d1 datetime,@d2 datetime set @d1='2014-05-04' set @d2='2014-05-18' SELECT (DATEDIFF(dd, @d1, @d2) + 1)
declare @d1 datetime,@d2 datetime
set @d1='2014-05-04'
set @d2='2014-05-18'
SELECT
(DATEDIFF(dd, @d1, @d2) + 1)
-(DATEDIFF(wk, @d1, @d2))
-(CASE WHEN DATENAME(dw, @d2) = 'Sunday' THEN 1 ELSE 0 END) -- discard sundays
我想这个会很好用:
SET DATEFIRST 1;
DECLARE @StartDate DATE = '2014-05-01',
@EndDate DATE = '2014-05-31';
DECLARE @RenamingDays INT = DATEDIFF(D,@StartDate,DATEADD(DAY,1,@EndDate)) % 7;
DECLARE @NoOfWeeks INT = DATEDIFF(D,@StartDate,DATEADD(DAY,1,@EndDate)) / 7;
;with cte as
(
SELECT @EndDate Dates,
0 i
WHERE @RenamingDays > 0
UNION ALL
SELECT DATEADD(DAY, -1, Dates),
i + 1
FROM CTE
WHERE i + 1 < @RenamingDays
)
,WorkingDays AS
(
SELECT COUNT(Dates) RenamingWorkingDays
FROM cte
WHERE DATEPART(dw, Dates) != 7
)
SELECT @NoOfWeeks * 6 + RenamingWorkingDays
FROM WorkingDays
它将在某些极端情况下失败,如:StartDate='2014-05-05'和EndDate='2014-06-2'。回答返回的查询是24,其中实际是25。现在检查StartDate='2014-05-04'和EndDate='2014-05-31'。当开始日期或结束日期是星期日时会发生这种情况。对不起:。。但是现在请检查StartDate='2014-05-05'和EndDate='2014-05-31'。哎呀!最后一次:sat也算在内!如果我简单地执行DATEDIFFD、@d1、@d2-DATEDIFFwk、@d1、@d2怎么办?这会影响我想要的结果吗?嗯。。。试装@d1='2014-05-11';设置为d2='2014-05-18';如果设置为@d1='2014-05-11'设置为@d2='2014-05-12'