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

SQL Server XQuery sum处理超百万值时为何转换money失败?

解决SQL Server中XML sum转money类型的报错问题

问题原因

当XML中数值等于或超过1000000.00时,XQuery的sum()函数会返回科学计数法格式的字符串(比如1e+06),而SQL Server的money类型无法直接解析这种格式,因此抛出转换错误;而float类型支持科学计数法解析,所以可以正常转换。

解决方案

以下几种方法可以继续使用money类型处理该场景:

  • 方法1:先转成decimal再转money(推荐)
    利用decimal类型可以识别科学计数法的特性,先将sum结果转为高精度decimal,再转成money,完全避免精度损失:

    SELECT CAST(CAST('<root><e>1000000.00</e></root>' AS XML).value('sum(/root/e)','decimal(19,4)') AS money)
    

    decimal(19,4)的精度完全覆盖money类型的取值范围(-922,337,203,685,477.5808 到 922,337,203,685,477.5807)。

  • 方法2:在XQuery中显式格式化数值
    使用XQuery的format-number()函数将sum结果格式化为普通十进制字符串,再转成money:

    SELECT CAST('<root><e>1000000.00</e></root>' AS XML).value('format-number(sum(/root/e), "0.00")','money')
    

    该方法直接输出符合money解析要求的字符串格式,从根源避免科学计数法问题。

  • 方法3:先转float再转money(不推荐,存在精度风险)
    如果只是临时过渡,也可以先转float再转money,但float是近似数值类型,处理高精度场景可能存在精度损失:

    SELECT CAST(CAST('<root><e>1000000.00</e></root>' AS XML).value('sum(/root/e)','float') AS money)
    

内容的提问来源于stack exchange,提问作者user25444365

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:25:58