3

我有以下查询,它为我产生了许多结果。其中之一是每条记录的天数。

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

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 数据库。我根据需要注释掉。旧的分钟是今天添加的新列。任何人都可以帮忙吗?

4

3 回答 3

5

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

于 2012-10-15T11:51:15.000 回答
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 点。

工作示例可以在这里找到。

于 2012-10-15T11:54:56.793 回答
0

To be safe that you get correct data from DATEPART(dw,GETDATE()) you need to use

SET DATEFIRST 1

It will make sure that 1 is Monday and 7 - is Sunday.

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

于 2012-10-16T18:19:10.713 回答