You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将数值转换为decimal(10,2)格式时遇错误,求解决方法

SQL查询结果格式问题及错误解决

错误原因

你遇到的Msg 245错误,核心原因是CASE语句的两个分支返回数据类型不匹配:

  • WHEN分支返回的是整数0(int类型)
  • ELSE分支返回的是字符串类型(经过CAST和REPLACE处理后)

SQL Server会自动尝试将低优先级类型转换为高优先级类型,这里字符串会被尝试转换为int,但'99.00'包含小数点,无法转换为整数,因此报错。

解决方案

方案1:统一CASE分支返回类型为字符串

将WHEN分支的0转为带两位小数的字符串,保证两个分支类型一致:

SELECT 
    CASE 
        WHEN ISNUMERIC('9900') != 1 THEN '0.00' 
        ELSE REPLACE(CAST(CAST('9900' AS decimal(10,2))/100 AS VARCHAR(20)), '0000', '')
    END AS BVN 

方案2:直接格式化数值为指定小数位的字符串

无需REPLACE,直接通过CAST将数值转换为指定长度的字符串,自动保留两位小数:

SELECT 
    CASE 
        WHEN ISNUMERIC('9900') != 1 THEN '0.00' 
        ELSE CAST(CAST('9900' AS decimal(10,2))/100 AS VARCHAR(10))
    END AS BVN 

方案3:使用FORMAT函数(SQL Server 2012+)

FORMAT函数可以直接指定数值格式,更直观:

SELECT 
    CASE 
        WHEN ISNUMERIC('9900') != 1 THEN '0.00' 
        ELSE FORMAT(CAST('9900' AS decimal(10,2))/100, 'N2')
    END AS BVN 

方案4:返回数值类型而非字符串

如果业务允许返回数值类型而非字符串,直接将结果CAST为decimal(10,2),查询结果会显示为99.00:

SELECT 
    CASE 
        WHEN ISNUMERIC('9900') != 1 THEN CAST(0 AS decimal(10,2))
        ELSE CAST('9900' AS decimal(10,2))/100 
    END AS BVN 

内容的提问来源于stack exchange,提问作者Sup Ravi Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:01:36