3

いくつかの結果を生成する次のクエリがあります。そのうちの 1 つは、各レコードの経過日数です。

式から週末を除いて、より正確な数値が必要です。進め方がわからず、見つけた答えを理解するのに苦労しています。これまでの私のクエリは次のとおりです。

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

DATEPART(dw,GETDATE()) から正しいデータを取得することを安全にするために、使用する必要があります

SET DATEFIRST 1

1 が月曜日、7 が日曜日であることを確認します。

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

于 2012-10-16T18:19:10.713 に答える