从SQL结果中删除周末

时间:2012-10-15 11:47:05

标签: sql sql-server sql-server-2005 datediff

我有以下查询为我生成了许多结果。其中一个是每个记录的天数。

我现在需要一个更准确的数字,从等式中删除周末。不知道如何继续并努力理解我找到的答案。到目前为止,我的查询是:

select
    i.incidentnumber,
    i.priority, 
    i.status, 
    i.subject,
    i.actualsystem, 
    t.ownerteam, 
    convert(varchar,i.createddatetime,103)[Created],
    convert(varchar,i.lastmoddatetime,103)[Modified], 
    datediff(day,i.createddatetime,{fn now()})[Days old],
    datediff(mi,i.createddatetime,{fn now()})[Minutes old],
    cast(i.createddatetime
    i.owner
from 
    incident i with (nolock) inner join task t with (nolock) on t.parentlink_recid = i.recid
where 
    i.status <> 'Closed' 
    and i.actualsystem <> 'System Administration' 
    --and i.service <> 'Service Request'
    and t.status in ('Active','Waiting','Accepted') 
    --and t.ownerteam <> 'UK Service Desk'

order by 
    --t.ownerteam asc
    --i.actualsystem asc
    datediff(day,i.createddatetime,{fn now()}) desc

我正在使用SQL服务器管理器并查询2005数据库。我在必要时发表评论。分钟旧是今天增加的一个新专栏。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:5)

DATEPART(dw, your_date)会告诉你这是否是一个周末。通常1表示星期六,7表示星期日,但它可以根据服务器配置而改变。阅读datepart函数以了解其工作原理

答案 1 :(得分:0)

如果您想计算范围内的工作日数(非周末),最简单的方法就是每周考虑2个周末日。
例如:

SELECT Datediff(D, '2012-01-01', '2012-01-31') / 7 * 5 + 
              Datediff(D, '2012-01-01', '2012-01-31') % 7 WorkDays, 
       Datediff(D, '2012-01-01', '2012-01-31')            AllDays 

要计算工时(包括部分工作时间),请使用以下查询:

SELECT ( T.WORKDAYS - 1 ) * 10 + OPENINGDAYHOURS + CLOSINGDAYHOURS 
FROM   (SELECT Datediff(D, OPEN_DATE, CLOSE_DATE) / 7 * 5 + 
                              Datediff(D, OPEN_DATE, CLOSE_DATE) % 7 WorkDays, 
               18 - Datepart(HOUR, OPEN_DATE) 
               OpeningDayHours, 
               Datepart(HOUR, CLOSE_DATE) - 8 
               ClosingdayHours, 
               Datediff(D, OPEN_DATE, CLOSE_DATE)                    AllDays 
        FROM   TABLE1)T 

此查询假定工作日从上午8点到下午6点。

可以找到工作示例here

答案 2 :(得分:0)

为了确保您从DATEPART(dw,GETDATE())获得正确的数据,您需要使用

SET DATEFIRST 1

确保1是星期一,7 - 星期日。

参考: http://msdn.microsoft.com/en-en/library/ms181598.aspx