找出SQL中两个24小时之间的小时差异

Ran*_*som 1 sql

我有一个约会数据集,包括每个约会的开始和结束时间.我需要计算约会持续时间的小时数,但这两个字段是24小时制,格式为INTEGER.为了使事情更糟他们格式化为两个3个4字符整数所以8301630例如,不08301630.

创建具有这两列之间的小时数的列的最佳方法是什么?我已经尝试将它们转换CHAR为最后两个的子串,但我不能让它适用于3和4个时间长度.

它目前看起来像这样:

???????????????????????
? startTime ? endTime ?
???????????????????????
?       830 ?    1600 ?
?       400 ?     800 ?
?      1350 ?    1400 ?
???????????????????????
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望它看起来像这样:

???????????????????????????????
? startTime ? endTime ? Hours ?
???????????????????????????????
?       830 ?    1600 ? 7.5   ?
?       400 ?     800 ? 4     ?
?      1350 ?    1400 ? .5    ?
???????????????????????????????
Run Code Online (Sandbox Code Playgroud)

Alo*_*kin 6

由于startTimeendTime都是整数,您可以使用简单的模数和除法来分隔分钟和小时.

以下表达式将startTime在几分钟内为您提供:

startTime % 100 + (startTime / 100) * 60
Run Code Online (Sandbox Code Playgroud)

您可以做同样的endTime和减去endTimestartTime以获取在几分钟的时间差的表达式:

(endTime % 100 + (endTime / 100) * 60) - (startTime % 100 + (startTime / 100) * 60)
Run Code Online (Sandbox Code Playgroud)

最后,将其转换为小时:

((endTime % 100 + (endTime / 100) * 60) - (startTime % 100 + (startTime / 100) * 60)) / 60.0
Run Code Online (Sandbox Code Playgroud)

注意除以60.0(它是一个浮点数)而不是60(它是一个整数),这样最终的结果将是float而不是整数.

您的最终SQL查询应如下所示:

SELECT 
    startTime, 
    endTime, 
    (((endTime % 100 + (endTime / 100) * 60) - (startTime % 100 + (startTime / 100) * 60)) / 60.0) 
        AS diff 
    FROM appointments 
Run Code Online (Sandbox Code Playgroud)