2017-02-24 2 views
0

従業員に対してシフト時間とShift_Typeを返すテーブルがあります シフトが2日以上経過し、1日のうちに公休日数が発生した場合は、シフトの公休日部分の時間を数える。 結果は深夜からシフトした時間をカウントするSQL更新ステートメント

のSQL Server 2014

Shift_StartTime Shift_EndTime Start_WeekDay End_WeekDay公休Shift_Type START_TIME END_TIME PH_DAY

Shift_StartTime列PH_DAYになる| Shift_EndTime | Start_WeekDay | End_WeekDay |公休Shift_Type START_TIME END_TIME PH_DAY 2017年2月1日3/01/2017月曜日火曜日2011年2月1日PHS 22:00 6:00 2 26/01/2017 27/01/2017木曜日金曜日26/01/2017 PHS 23:00 7:00 1

私はUPを使いたいDATE文を使用して、PH_DAY列を時間数で更新します。 - START_TIME)

Shift_Type =)PHS '及び(公休= Shift_StartTime)

:これは、エラーを

UPDATEのtbl_Employee_Hrs

SET [PH_Day] =数(00' '24')を返します

+0

他のユーザーがあなたの質問に答えるのに役立つエラーが分かっています。また、更新しているテーブルのスキーマ(列名とデータ型)とSQL Serverのバージョンを提供することも検討してください。 – lyrisey

+0

そのコードをフォーマットしてください。また、サンプルデータセットと期待される結果を提供してください。 – scsimon

答えて

0

これを試すことができますか?

UPDATE Training.dbo.ShiftTable 
    SET PH_Day = (
    CASE WHEN CONVERT(DATETIME, PublicHoliday, 103) = Shift_StartTime 
      THEN DATEDIFF(hh, CONVERT(DATETIME, PublicHoliday, 103), (CAST(Shift_StartTime AS datetime) + CAST(Start_Time AS datetime))) 
     WHEN CONVERT(DATETIME, PublicHoliday, 103) = Shift_EndTime 
      THEN DATEDIFF(hh, CONVERT(DATETIME, PublicHoliday, 103), (CAST(Shift_EndTime AS datetime) + CAST(End_Time AS datetime))) 
    ELSE 0 
    END 
) 
+0

データをテーブルに編集できませんでした。エラーメッセージ:メッセージ241、レベル16、状態1、行1 文字列から日付および/または時刻を変換すると変換に失敗しました。 Start_TimeとEnd_Timeの列の形式は次のとおりです。convert(varchar(5)、ru.fldEndTime、108)形式の不一致を引き起こしていると思います – Dave

+0

Shift_StartTime、Shift_EndTime、PublicHoliday、 tbl_Employee_HrsのStart_TimeフィールドとEnd_Timeフィールド? – MayowaO

+0

こんにちはMayowaO、私と頑張ってくれてありがとう、私は一日中外出していました。私たちの間には明らかな時差があります。 Shift_StartTimeとShift_EndTimeはdatetimeですPublicHolidayはvarchar(15)です。 Start_TimeとEnd_Timeはvarchar(5)です。最後の2つは日付なしの時間表示だけでした。おかげで – Dave

関連する問題