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

T-SQL转换带千位逗号的nvarchar为decimal时出现转numeric错误

错误原因

ISNUMERIC函数判断带千位分隔逗号的数值字符串时会返回1,但CAST函数默认无法识别字符串中的逗号为千位分隔符,直接转换会触发类型转换报错。

解决方案

方案1:移除千位分隔符后转换(全版本兼容)

先通过REPLACE函数去掉Value字段中的所有逗号,再进行类型转换,兼容性最好,逻辑简单通用:

SELECT 
    Id, 
    IIF(ISNUMERIC(REPLACE([Value], ',', '')) = 1, CAST(REPLACE([Value], ',', '') AS DECIMAL(18, 2)), 0) AS Value
FROM 
    [dbo].[AssetLD]

如果使用SQL Server 2012及以上版本,推荐用TRY_CAST替代ISNUMERIC+CAST的组合,规避ISNUMERIC本身的误判缺陷(部分非数值特殊符号也会被ISNUMERIC判定为1):

SELECT 
    Id, 
    ISNULL(TRY_CAST(REPLACE([Value], ',', '') AS DECIMAL(18, 2)), 0) AS Value
FROM 
    [dbo].[AssetLD]

方案2:使用区域解析函数转换(SQL Server 2012及以上可用)

如果需要保留对千位分隔格式的校验,可使用TRY_PARSE指定对应区域规则直接解析带逗号的数值:

SELECT 
    Id, 
    ISNULL(TRY_PARSE([Value] AS DECIMAL(18, 2) USING 'en-US'), 0) AS Value
FROM 
    [dbo].[AssetLD]

该方案依赖区域规则,en-US区域默认将逗号识别为千位分隔符,适配你当前的数据格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:36:03