私はSQLのエキスパートではなく、これを理解するための助けが必要です。私はSQL Server 2012データベースを使用した給与計算アプリケーションを作成しています。このデータベースは、ユーザーがパンチインした時間を把握し、パンチアウトしてから作業時間と他の計算を作業時間に基づいて計算する必要があります。作業時間は、午前9時30分から午後5時30分までの時間として計算されます。ここでは、ロジックは次のとおりです。Selectステートメントで条件変数を割り当てるSQL Server
- 後でより午前9時30分で、ユーザーのパンチは作業開始場合は午前9時30分、作業開始時刻より早いで、ユーザーのパンチは午前9時30分
- に を設定されている場合、実際の時間が になるでしょう。
- 午後5時30分以降にパンチアウトした場合作業終了時間は、 午後5:30に設定されます。
- ユーザが午後5時30分までにパンチアウトする場合。作業終了時間は実際にパンチアウト時間に に設定されます
ここで私は試してみましたが、どこにも行かなかった。どんな助けでも高く評価されます:
declare @start time;
declare @end time;
select @start=cast('09:30:00.0000000' as time)
select @end=cast('17:30:00.0000000' as time)
SELECT Datename(dw,LastUpdate) as WeekDay
,FORMAT(PunchIn,'MM/dd/yyyy hh:mm tt') as PunchIn
,FORMAT(PunchOut,'MM/dd/yyyy hh:mm tt') as PunchOut
,case
--employee punched in before 9:30 so take 9:30 as start time
when datediff(mi,@start,cast(PunchIn as time))<0 then (select @start='09:30:00.0000000') end
from TimeTracker
これは完全なSQLではなく、私が採用しようとしているロジックを見ることができます。私の質問は、パンチインタイムやパンチアウトタイムなど、別の列の値に基づいて開始時間または終了時間を設定する方法です。 SQLでは、when句の一部としてselect文にエラーが発生します。私はこれを他の言語でも簡単に行うことができますが、SQLで困惑しています。
'(@ start = '09:30:00.0000000 ')'を '' '09:30:00.0000000'」に変更するか、さらに「then @ start」 – Beth