2016-08-29 9 views
0

日付が割り当てられた(datetime)および日付が解決された(datetime)テーブルがあります。SQL Server 2012 - 週末を除く2つのdatetimes間の作業時間中の計算時間

私は、勤務時間中および週末を除いて経過した時間(秒)を計算しようとしています。

作業時間は月曜日から金曜日まで09:00:00.000000から17:30:00.000000です。

金曜日に金曜日にプロジェクトが割り当てられた月曜日は16:00:00.000000、月曜日は10:30:00.000000に解決された場合、合計経過時間は3時間または180分または10,800秒になります。

私は、週末の時間を除いて仕事時間を除いた記事を見ました。どんな助けでも大歓迎です!あなたはこの試みることができる

+0

労働時間は固定されていますか?変わらない?彼らは連続していますか(昼休みなし)ですか? –

+1

休日はどうですか? –

+0

勤務時間は固定されており、この場合は休日を無視しています。ありがとう! – FBeveridge

答えて

0

:単一の式でこのすべてを行うことは可能かもしれませんが

select datediff(hh, @d1, @d2) - (datediff(wk, @d1, @d2) * 2 * 8.5) - datediff(dd, @d1, @d2) * (24-8.5) 
+0

ありがとう@ Polux2これを実行すると、負の整数で終了します...この文が何をしているのか詳しく説明できますか?ありがとう! – FBeveridge

+0

'@ d2> @ d1'であなたは本当ですか?それは私のコンピュータ上で素晴らしい作品です。数時間ではなく数分で作業したい場合は、hhをmi( "2 * 8.5 * 60"、 "(24-8.5)"と "24-8.5 * 60" – Polux2

0

を、私はそれをしようとしないでしょう。非常に多くの潜在的な人為的ミス(転写エラーを含む)、非常に時間がかかり、デバッグや修正が難しい。

代わりに、これを使ってデータを返さなければならない場合は、T-SQLのユーザー定義関数として実行します。私がそれを表示したり、この情報を使ってレポートを作成しようとしていた場合は、コードでそれを行うことを検討します。しかし、ユーザー定義のT-SQL関数が最も柔軟なソリューションになるでしょう。

私はまだこのようなことはしていませんので、アルゴリズムを教えてください。

@ Date1と@ Date2という2つの日付/時刻値があるとします。 @ Date1 < @ Date2と仮定します。また、@ Date1と@ Date2の両方が就業日と勤務時間内にあると仮定します。

@ Date1と@ Date2が同じ日付の場合は、@ Date1と@ Date2の差を秒単位で返します。

@firstMorningを@ Date1の後の最初の9時にします。 @ Date1が午前9時に設定されている場合、@firstMorning = @ Date1です。

@lastMorningを@firstMorningの直前の9:00とし、@ Date2の直前の9:00とします。 (@ Date2の開始時刻、基本的に)

@workWeeks = @firstMorningと@lastMorningの間の月曜日〜金曜日の週の数を表示します。

Let @firstWeekDays = @firstMorningから金曜日の午前9:00までの日数を指定します。 @firstMorning = Friday 9:00 amの場合は、@ firstWeekDaysを0に設定してください。

Let @lastWeekDays =先週の月曜日の午前9時から@lastMorningまでの日数。 @lastMorning = Monday午前9:00の場合は、@ lastWeekDaysを0に設定します。

@SecondsPerDay = 8.5 * 3600とします。

リターン(@workWeeks * 5 * @SecondsPerDay)+ (@firstWeekDays * @SecondsPerDay)+(日付1 @上@日付1と午後5時30分の間の秒)+(@lastWeekDays * @SecondsPerDay)+(秒の間@lastMorningと@ Date2)

このロジックはコードでテストされていないことに注意してください。もしあれば、私はあなたにコードを与えます。 :)

関連する問題