SQL Server环境下decimal(4,2)类型时间值转time()类型方法咨询
SQL Server 特殊十进制时间转time类型解决方案
方案1:计算列实现(优先推荐)
直接在表设计器的计算列规范中填入以下公式即可,兼容SQL Server 2012及以上版本:
CONVERT(time, STUFF(FORMAT(源字段名, '00.00'), 3, 1, ':'))
操作步骤:
- 打开SQL Server Management Studio的表设计器,新增计算列,自定义列名(如
converted_time) - 在「计算列规范」的「公式」输入框填入上述表达式,替换「源字段名」为你的
decimal(4,2)类型字段名 - 字段类型会自动识别为
time类型,若需要存储计算结果可设置「是持久化的」属性为「是」
如果需要兼容SQL Server 2012之前的版本,可使用数值拆分拼接的公式:
CONVERT(time, RIGHT('0' + CAST(FLOOR(源字段名) AS VARCHAR(2)), 2) + ':' + RIGHT('0' + CAST(ROUND((源字段名 - FLOOR(源字段名)) * 100, 0) AS VARCHAR(2)), 2) )
方案2:SELECT查询实现
直接在查询语句中嵌入转换逻辑即可:
SELECT 源字段名, CONVERT(time, STUFF(FORMAT(源字段名, '00.00'), 3, 1, ':')) AS 转换后时间 FROM 你的表名
验证结果
对应示例数据转换结果完全匹配:
| 源数据 | 期望结果 | 转换后结果 |
|---|---|---|
| 14.25 | 14:25 | 14:25:00 |
| 8.09 | 08:09 | 08:09:00 |
| 10.10 | 10:10 | 10:10:00 |
注意事项
如果源数据存在不符合时间规范的值(如小数部分>=60,或整数部分>=24),转换时会触发报错,可根据业务需求新增CASE判断过滤或转换异常值。
内容的提问来源于stack exchange,提问作者Craig Cunningham
相关产品推荐
相关产品推荐

