2012-10-15 111 views
3

我有以下查詢,可以爲我生成許多結果。其中之一是每個記錄的舊天數。從SQL結果中刪除週末

現在我需要一個更準確的數字,通過從等式中刪除週末。不知道如何繼續努力去理解我找到的答案。我的查詢到目前爲止是:

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

是週末只有星期六和星期天?假期怎麼樣?星期五假期是週末的一部分嗎?假期一般是否計算在內?本網站上有很多關於計算兩個日期之間的天數的問題,最可靠的解決方案通常是[日曆表](http://stackoverflow.com/questions/1201874/calendar-table-for-data-倉庫),您可以簡單地將日期標記爲工作日,然後編寫簡單的查詢以獲取答案。 – Pondlife

回答

5

DATEPART(dw, your_date)會告訴你,如果這是一個週末。通常1表示星期六,7表示星期日,但可以根據服務器配置進行更改。閱讀關於datepart函數以瞭解其工作原理

+0

實際上1通常意味着星期日和7 =星期六,但邏輯是相同的。您可以使用select @@ DATEFIRST找出服務器上的哪一天設置爲= 1。如果它有7,那麼週日=一週的第一天。 –

+0

多數民衆贊成在有點令人困惑,因爲@@ DATEFIRST功能應該返回一週的第一天,這是星期天,但星期日的值爲7,而不是1,如你所料。如果你檢查這個鏈接:http://msdn.microsoft.com/pt-br/library/ms181598.aspx,你會看到那個星期日意味着7. – Diego

+0

誰說週日是一週中的第一天?很多人會告訴你這是星期一。這就是爲什麼最好通過使用日期表來處理與日期相關的任務,而不是基於服務器設置返回不同結果的函數的原因。 – Pondlife

0

如果要計算範圍內的工作日數(非週末),最簡單的方法就是每週考慮兩個週末日期。
例如:(含諧音)

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 

該查詢假定工作日從上午08點到下午6點。

可以找到工作實例here

+0

我想知道我是否能夠在一週中的某幾天工作或在一天中的工作時間工作。後者肯定聽起來有點困難。 – Allegin

+0

爲什麼'營業時間'會更難?所有的日子都有相同的工作時間數量,所以剩下的就是把日子乘以每天的小時數。 – Gidil

+0

因此,如果每個工作日的營業時間爲10天並且有281天的記錄保留開放,那麼我如何計算除小時以外的真實營業時間。例如營業時間是上午8點到下午6點。創紀錄的時間是下午5點,並開放了281天。我怎樣才能找到真正的營業時間? – Allegin