我将SQL表JSON数据放入其中一列。列类型为varchar max。 我必须使用sql从该列中提取数据。例如
{"RESPONSE":{"value":"<p>this is a test.....</p>","isAnswered":true}}'
我想提取:this is a test.....
并摆脱所有属性和节点
我是JSON的新手。 Fisrt时间调查并失去了
答案 0 :(得分:0)
你可以试试这个:
begin transaction
declare @string varchar(max)
declare @result varchar(max)
declare @response varchar(max)
set @string = '{"RESPONSE":{"value":["d"],"isAnswered":true}}'
set @response = SUBSTRING(@string, PATINDEX('%response%',@string), PATINDEX('%":{"value"%',@string) - PATINDEX('%response%',@string))
print @response
-- for html tags
DECLARE @htmlTags TABLE
(
ID INT IDENTITY(1,1),
htmlTag varchar(50)
);
INSERT INTO @htmlTags
VALUES
('<p>'),
('</p>'),
('<h1>'),
('</h1>'),
('"'),
('{'),
('}'),
(':'),
(','),
('value'),
('isAnswered'),
('true'),
('false'),
(' '),
('['),
(']')
;
SET @result = @string
DECLARE @temp varchar(max) = '';
WHILE @result != @temp
BEGIN
SET @temp = @result;
SELECT
@result = Replace(@result, htmlTag, '')
FROM
@htmlTags
;
END;
set @result = REPLACE(@result, @response, '')
print @result
rollback
我假设您的JSON响应的结构是:
{ “RESPONSE”:{ “值”: “”, “isAnswered”:真}}
编辑:我建议将所有html标签和名称(如)插入到htmlTags表中以获得您想要的结果,因为您无法预测它们将出现在json中。更新:使用此集@response = SUBSTRING(@string,PATINDEX('%response%',@ string),PATINDEX('%“:{”value“%',@ string) - PATINDEX('%response %',@ string))因此您可以替换json中的任何类型的RESPONSE模式。
希望它有所帮助。