使用列作为变量解码Base64

问题描述 投票:0回答:1

目的:

我想使用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';

情况:

我有一个Base64编码的列('ProductsBase64'),我想解码。

唯一字符串的示例:我想解码整个列

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
sql sql-server
1个回答
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 

推荐问答