SQL从SQL列中提取数据

时间:2014-08-26 16:48:32

标签: sql sql-server json tsql

我将SQL表JSON数据放入其中一列。列类型为varchar max。   我必须使用sql从该列中提取数据。例如

{"RESPONSE":{"value":"<p>this is a test.....</p>","isAnswered":true}}'  

我想提取:this is a test.....
并摆脱所有属性和节点
我是JSON的新手。 Fisrt时间调查并失去了

1 个答案:

答案 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'),
    ('&nbsp;'),
    ('['),
    (']')
;

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模式。

希望它有所帮助。