我们有一个数据库,其中包含一个存储计划信息的表,包括时钟输入和时钟输出列。问题在于,创建此表的任何人都将这些属性作为整数而不是时间或日期时间(这也可能由创建计划的软件强制执行)。因此,例如,它不是说8:00:00,而是说480(当天通过的分钟数)。 18:00(下午6点)显示1080,午夜是1440等。
我必须查询此报告,并根据计划的打孔与实际工时(根据时间数据类型存储)进行计算。我试图将整数分钟转换为select语句中的时间,以便有一个我可以用于多重比较的CTE。到目前为止,这是我提出的(请记住,时间表是按季度增量完成的,因此.25,.5,.75等)。
SELECT CASE CAST(ClockIN AS decimal) / 60
WHEN .25 THEN CAST('00:15:00.0000000' AS time)
WHEN .5 THEN CAST('00:30:00.0000000' AS time)
WHEN .75 THEN CAST('00:75:00.0000000' AS time)
WHEN 1 THEN CAST('01:00:00.0000000' AS time)
.....
WHEN 24 THEN CAST('00:00:00.0000000' AS time)
END AS ClockIn
我正在尝试使用干净的代码,而不是每次运行报表时都会进行太多的计算来占用资源。有没有更简单的方法来做所有这些,我是不是开箱即用?到目前为止,这是我能想到完成我需要的唯一方法,这是一个表示传递时间转换为时间戳的整数。任何建议都将受到赞赏!
答案 0 :(得分:0)
您可以创建一个时间,然后使用DATEADD只添加分钟。所以在480分钟时,你会把它添加到创建“00:00”的新时间,它应该会在上午8:00离开。
DATEADD(minute, ClockIN, '00:00')