如何在SQL查询中将十进制时长值与时间值相加计算结束时间
实现时间与十进制时长相加计算结束时间
已知数据表包含非空列ARRIVAL_TIME(时间类型)和DURATION(DECIMAL(4,2),取值为1、1.25、1.5、1.75),需要将ARRIVAL_TIME与DURATION相加得到结束时间(例如08:00:00加1.25得到09:15:00),以下是主流数据库的实现方案:
MySQL
利用ADDTIME和SEC_TO_TIME函数,将十进制时长转换为秒后再转为时间格式,与原时间相加:
SELECT ARRIVAL_TIME, DURATION, ADDTIME(ARRIVAL_TIME, SEC_TO_TIME(DURATION * 3600)) AS END_TIME FROM your_table;
原理:DURATION * 3600将小时转为总秒数,SEC_TO_TIME把秒数转为HH:MM:SS格式,最后通过ADDTIME完成时间相加。
PostgreSQL
通过INTERVAL类型实现时长转换,直接与时间相加:
SELECT ARRIVAL_TIME, DURATION, ARRIVAL_TIME + INTERVAL '1 hour' * DURATION AS END_TIME FROM your_table;
原理:将十进制时长乘以1小时的时间间隔,PostgreSQL会自动处理小数部分(如0.25小时=15分钟),直接与原时间相加得到结果。
SQL Server
使用DATEADD函数,将十进制时长转为总分钟数后直接添加到原时间:
SELECT ARRIVAL_TIME, DURATION, DATEADD(MINUTE, DURATION * 60, ARRIVAL_TIME) AS END_TIME FROM your_table;
原理:DURATION * 60将小时转为总分钟数,DATEADD直接把分钟数添加到原时间上,自动处理进位。
以上方案均可满足需求,代入示例值08:00:00和1.25,计算结果均为09:15:00。
内容的提问来源于stack exchange,提问作者Corpus
相关产品推荐
相关产品推荐

