2017-02-24 70 views
0

我有一张表格,用于返回员工的班次时间和Shift_Type 如果班次超过2天并且有一天的公共假日费率,我希望计算轮班公共假期部分的小时数。 结果将是列PH_DAYSQL Update语句可以计算午夜班次的小时数

的SQL Server 2014

Shift_StartTime Shift_EndTime Start_WeekDay End_WeekDay PublicHoliday Shift_Type START_TIME END_TIME PH_DAY

Shift_StartTime | Shift_EndTime | Start_WeekDay | End_WeekDay | PublicHoliday Shift_Type START_TIME END_TIME PH_DAY 2017年2月1日2017年3月1日周一周二2/01/2017小灵通22:00 6:00 2 26/01/2017 27/01/2017周四周五26/01/2017小灵通23:00 7:00 1

我想用UP DATE语句用小时数来更新PH_DAY列。这一个返回一个错误

UPDATE tbl_Employee_Hrs

SET [PH_Day] =计数('24:00' )) - START_TIME)

WHERE Shift_Type = 'PHS' 和(PublicHoliday = Shift_StartTime)

+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