使用列作为变量解码Base64

时间:2019-04-30 16:09:48

标签: sql sql-server

目标:

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

1 个答案:

答案 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