SQL中如何将JSON字符串值转换为int及decimal类型?
解决JSON字符串转decimal/int的千分位问题
你的问题出在JSON中的Price和Quantity字段包含千分位逗号(比如"100,000"、"2,000.00"),SQL Server无法直接将带逗号的字符串转换为数值类型,必须先移除逗号再执行类型转换。
以下是修正后的代码,通过REPLACE函数移除千分位逗号,再用CAST转换为目标类型:
DECLARE @json NVARCHAR(MAX) SET @json = N'[ { "Order": { "Number":"SO43659", "Date":"2023-05-31T00:00:00" }, "ItemNumber":"A12345", "Item": { "Price":"24.99", "Quantity":"100,000" } }, { "Order": { "Number":"S12345", "Date":"2023-06-01T00:00:00" }, "ItemNumber":"AW2312", "Item": { "Price":"2,000.00", "Quantity":"3" } } ]' SELECT * FROM OPENJSON ( @json ) WITH ( Number varchar(200) '$.Order.Number' , Date datetime '$.Order.Date', Customer varchar(200) '$.ItemNumber', Quantity INT AS CAST(REPLACE(JSON_VALUE(value, '$.Item.Quantity'), ',', '') AS INT), Price DECIMAL(10,2) AS CAST(REPLACE(JSON_VALUE(value, '$.Item.Price'), ',', '') AS DECIMAL(10,2)) )
关键说明:
JSON_VALUE(value, '$.Item.Quantity'):提取JSON中的原始字符串值REPLACE(..., ',', ''):移除字符串中的所有千分位逗号CAST(...) AS INT/DECIMAL(10,2):将处理后的纯数字字符串转换为目标数值类型
这种方式能兼容带千分位和不带千分位的数字字符串,确保转换成功。
内容的提问来源于stack exchange,提问作者juipin67
相关产品推荐
相关产品推荐

