在SQL中替换JSON格式化字符串

时间:2013-05-21 21:37:28

标签: sql sql-server

我的表格列中有这样的内容:

{"InputDirection":0,"Mask":"AA","FormatString":null,"AutoCompleteValue":null,
 "Filtered":"0123456789","AutoComplete":false,"ReadOnly":true}

我想要做的是在"Mask":"AA"中将A更改为N,如果存在则删除"Filtered":"0123456789"。掩码可以采用不同的形式,如A9A,'AAAA`等。

如果是在C#中,我可以通过将其解析为JSON等来自己完成,但我需要在SQL中进行。

我发现这篇文章展示了如何将JSON解析为Table。这给了我一个想法,我可以将每个字段解析为临时表并对其进行更改并将其转换回JSON,以便更新我从中获取此JSON字段的实际字段。但是,这对我和服务器来说都是一个繁琐的过程。

有更好的想法吗?

2 个答案:

答案 0 :(得分:2)

您可以使用此LINK

然后使用以下代码

select * into #demo from
(Select * from parseJSON('{"InputDirection":0,"Mask":"AA","FormatString":null,"AutoCompleteValue":null,
 "Filtered":"0123456789","AutoComplete":false,"ReadOnly":true}

')) a

select * from #demo

--- CHANGE THE DATA HERE AS REQUIRED


DECLARE @MyHierarchy JSONHierarchy;
INSERT INTO @myHierarchy
select * from #demo;


-- USE THIS VALUE AND UPDATE YOUR JSON COLUMN
SELECT dbo.ToJSON(@MyHierarchy)


drop table #demo

答案 1 :(得分:0)

我可能在这里遇到了问题,但为什么你不能简单地使用REPLACE更新所需内容和LIKE来识别应该更新的JSON字符串?

update table_T
set json_string = REPLACE(json_string, '"Filtered":"0123456789",', '')
where json_string like '%"Mask":"AA"%'

我不明白为什么你需要解析它......