我有以下查询为我生成了许多结果。其中一个是每个记录的天数。
我现在需要一个更准确的数字,从等式中删除周末。不知道如何继续并努力理解我找到的答案。到目前为止,我的查询是:
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数据库。我在必要时发表评论。分钟旧是今天增加的一个新专栏。有人可以帮忙吗?
答案 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 - 星期日。