Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 在ms sql server中查找不包括星期日的工作日数_Sql Server 2008 - Fatal编程技术网

Sql server 2008 在ms sql server中查找不包括星期日的工作日数

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)

我们在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)
  -(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'