SQL Server 2022转换负数值至NVARCHAR(MAX)时算术溢出错误求助
解决方案
方案1:先转NVARCHAR(4000)再转NVARCHAR(MAX)
既然非负值或用NVARCHAR(4000)能正常执行,先把数值转成NVARCHAR(4000),再显式转成NVARCHAR(MAX),绕开直接转换的bug:
SELECT CONVERT(NVARCHAR(MAX), CONVERT(NVARCHAR(4000), "VALUE", 3)) FROM "MY_DB"."MY_SCHEMA"."TEST"
方案2:用STR函数替代CONVERT
STR函数可直接把数值转成字符串,默认处理正负号,之后再转成NVARCHAR(MAX)即可:
SELECT CONVERT(NVARCHAR(MAX), STR("VALUE", 15, 10)) FROM "MY_DB"."MY_SCHEMA"."TEST"
注:STR的第一个参数15是总长度,第二个10是小数位数,可根据实际需求调整。
方案3:使用FORMAT函数格式化
FORMAT函数支持灵活的数值格式化,返回结果本身就是NVARCHAR类型,直接满足MAX的需求:
SELECT FORMAT("VALUE", '0.0000000000') FROM "MY_DB"."MY_SCHEMA"."TEST"
注:格式字符串'0.0000000000'对应原样式3的小数位数,可按需修改。
方案4:先CAST为DECIMAL再转NVARCHAR(MAX)
如果数值精度在DECIMAL范围内,先转成DECIMAL类型再转换,避免FLOAT转NVARCHAR的异常:
SELECT CONVERT(NVARCHAR(MAX), CAST("VALUE" AS DECIMAL(18,10)), 3) FROM "MY_DB"."MY_SCHEMA"."TEST"
内容的提问来源于stack exchange,提问作者Fabich
相关产品推荐
相关产品推荐

