将整数转换为时间

时间:2015-06-11 19:29:06

标签: sql-server-2008 tsql

我们有一个数据库,其中包含一个存储计划信息的表,包括时钟输入和时钟输出列。问题在于,创建此表的任何人都将这些属性作为整数而不是时间或日期时间(这也可能由创建计划的软件强制执行)。因此,例如,它不是说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

我正在尝试使用干净的代码,而不是每次运行报表时都会进行太多的计算来占用资源。有没有更简单的方法来做所有这些,我是不是开箱即用?到目前为止,这是我能想到完成我需要的唯一方法,这是一个表示传递时间转换为时间戳的整数。任何建议都将受到赞赏!

1 个答案:

答案 0 :(得分:0)

您可以创建一个时间,然后使用DATEADD只添加分钟。所以在480分钟时,你会把它添加到创建“00:00”的新时间,它应该会在上午8:00离开。

DATEADD(minute, ClockIN, '00:00')