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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:35:29