目标:
我想使用OPENJSON
函数从表中解码Base64列,并像这样从解码后的字符串中提取'a'键:
DECLARE @JSON nvarchar(MAX) = 'column name' -- Here i am puting 'column name' because im not sure how to insert a column into a declared variable.
SELECT [Value]
FROM OPENJSON(@JSON)
WHERE [key] = 'a';
情况:
我有一列('ProductsBase64')是要解码的Base64编码。
唯一字符串的示例: 我想解码整个列
DECLARE @JSON nvarchar(MAX) = N'{"a":1,"b":2,"c":3,"d":4}';
SELECT *
FROM OPENJSON(@JSON)
where type = 2
结果:
key value type
a 1 2
b 2 2
c 3 2
d 4 2
答案 0 :(得分:1)
假设原始文本编码与varchar
兼容,则可以使用以下方法(使用XML xs:base64Binary
方法进行base 64解码,然后将其转换为VARCHAR
,最后通过作为OPENJSON
的输入)
CREATE TABLE #t
(
ProductsBase64 VARCHAR(max)
)
INSERT INTO #t
VALUES ('eyJhIjoxLCJiIjoyLCJjIjozLCJkIjo0fQ=='); /*{"a":1,"b":2,"c":3,"d":4} */
SELECT ca.*
FROM #t
CROSS APPLY (SELECT *
FROM OPENJSON(
CONVERT (
VARCHAR(MAX),
CAST('' AS XML).value('xs:base64Binary(sql:column("ProductsBase64"))', 'VARBINARY(MAX)')
)
)
WHERE type = 2) ca