无需函数与Declare:将DECIMAL小时转换为时分格式的SQL SELECT实现
解决方案
嘿,这个需求我完全get到了!咱们不用任何函数、不用DECLARE,纯SELECT语句就能搞定。核心思路是先按你的计算逻辑算出总分钟数,再拆分小时和分钟,最后处理分钟的前置0问题。
假设你的DECIMAL字段名叫decimal_val,对应的表是your_table,直接用这条语句就行:
SELECT CONCAT( decimal_val DIV 1, ':', CASE WHEN (decimal_val * 60) DIV 1 % 60 < 10 THEN CONCAT('0', (decimal_val * 60) DIV 1 % 60) ELSE (decimal_val * 60) DIV 1 % 60 END ) AS formatted_time FROM your_table;
咱们拆解下逻辑:
decimal_val DIV 1:用整数除法直接提取字段的整数部分,也就是小时数(比如0.17 DIV 1得到0,1.33 DIV1得到1)。(decimal_val * 60) DIV 1:按照你的计算规则,把字段值转换成总分钟数的整数部分(0.17*60=10.2,DIV1后得到10)。% 60:取总分钟数除以60的余数,就是最终的分钟部分。CASE语句:判断分钟数是否小于10,如果是就拼接'0'补位,否则直接用原数,确保分钟是两位数。
测试几个场景:如果字段值是0.17,会得到0:10;如果是0.08,会得到0:04;如果是1.25,结果就是1:15,完全符合你的要求!
内容的提问来源于stack exchange,提问作者Veljko
相关产品推荐
相关产品推荐

