我有一个约会数据集,包括每个约会的开始和结束时间.我需要计算约会持续时间的小时数,但这两个字段是24小时制,格式为INTEGER.为了使事情更糟他们格式化为两个3个4字符整数所以830与1630例如,不0830和1630.
创建具有这两列之间的小时数的列的最佳方法是什么?我已经尝试将它们转换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)
由于startTime和endTime都是整数,您可以使用简单的模数和除法来分隔分钟和小时.
以下表达式将startTime在几分钟内为您提供:
startTime % 100 + (startTime / 100) * 60
Run Code Online (Sandbox Code Playgroud)
您可以做同样的endTime和减去endTime从startTime以获取在几分钟的时间差的表达式:
(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)
| 归档时间: |
|
| 查看次数: |
1587 次 |
| 最近记录: |