0

次のようなデータがテーブルにあります。

TimeIn                   TimeOut           
-------------------------------------
6/1/2010 09:00:00   Null     
6/2/2010 09:00:00   6/2/2010 16:45:00       
6/3/2010 10:05:00   Null                    
6/4/2010 07:30:00   6/4/2010 15:45:00    

「サインアウトされていない」列の最後のアクティビティを検索するためのストアドプロシージャがあります

セルを他のセルにコピーするためのストアドプロシージャもあります...

次に、必要なのは[TimeOut]を更新することです(タイムアウトがない場合)

よりエレガントな方法で

UPDATE TimeOut SET DATEPART(HOUR, TimeOut) = DATEPART(HOUR, TimeIN) + 8

したがって、全体的なアイデアは、最初に最後のアクティビティかどうかを確認することでした-タイムアウト列がnull

そうである場合は、最大労働時間を許可してTimeOutに署名します(8)。

それを行う簡単な方法はありますか?

アップデート

マークアンサーに関しては、これはユーザーがサインアウトしなかったかどうかを調べるための選択です

SELECT CASE WHEN [TimeOut] IS NULL THEN '' ELSE CONVERT(NVARCHAR,[TimeOut]) END FROM tblTime WHERE tId = ( SELECT MAX(tId) FROM tblTime WHERE UserId = 123

だから私は最後の活動でサインアウトしなかった人を見つけるクエリを持っています

次に、その特定の行フィールドを更新するだけで済みますTimeOut

+8の時間でそれが私の質問でした

4

3 に答える 3

1

を使用する必要があるようですdateadd

UPDATE TimeOut 
SET TimeOut = DATEADD(HOUR, 8, TimeIN)
WHERE ....

これはプラス8時間に設定TimeOutされます。TimeIn

于 2012-10-21T20:17:17.897 に答える
0

where TimeOut IS NULLフィールドが実際にnullであるものだけを更新するように句を追加しますか?

于 2012-10-21T19:22:10.447 に答える
0
UPDATE tblTime  SET TimeOut = DATEADD(HOUR,8,TimeIn) WHERE tId = ( SELECT MAX(tId) FROM tblTime WHERE UserId = 1234)
于 2012-10-21T21:31:52.053 に答える