将5位int值转换为时间

时间:2013-12-13 20:01:03

标签: sql sql-server

我试图在SQL中将5整数时间转换为实时。代码如下,输出样品行也在下面。我希望最终做的是减去结束时间和开始时间以获得总时间,然后将它们加在一起并创建一个触发器,说明当员工达到30,35和40小时标记时,发送电子邮件以发出警报有人。这是为加班目的。

SELECT empl_numb
        ,start_time
        ,end_time
        ,dateadd(d, trans_rdat + 5843, 0) AS theday
  FROM ei30
 WHERE empl_numb = '12345' -- and DATEADD(d, TRANS_RDAT + 5843 ,0)
    AND shift_break_code NOT LIKE 'L'
    AND shift_break_code NOT LIKE 'S'
 ORDER BY dateadd(d, trans_rdat + 5843, 0) DESC;    

结果:

    EMPL_NUMB   START_TIME  END_TIME    TheDay
    12345       01257       01714       2013-12-12 00:00:00.000

2 个答案:

答案 0 :(得分:1)

使用适当的数据类型存储日期和时间通常是一种好习惯。

您可以对时间部分使用DATEADD()和模数除法:

DECLARE @time INT = 1234
SELECT DATEADD(minute,@time%100,DATEADD(hour,(@time/100),CAST('' AS TIME)))

编辑:因为它实际上是CHAR(5),您可以使用SUBSTRING()和连接:

DECLARE @time CHAR(5) = '01234'
SELECT CAST(SUBSTRING(@time,2,2)+':'+RIGHT(@time,2) AS TIME)

答案 1 :(得分:0)

由于您无法更改数据类型,因此您必须执行字符串操作,以使用SUBSTRING将字符串更改为有效的time格式,然后您可以使用{ {3}}或CAST功能开启。我没有方便的SQL服务器实例,因此我将留给您将这些功能放在一起以产生您的解决方案。