Расшифруйте Base64, используя столбец в качестве переменной - PullRequest
0 голосов
/ 30 апреля 2019

Цель:

Я бы хотел декодировать столбец Base64 из таблицы с помощью функции OPENJSON и извлечь клавишу '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 Ответ

1 голос
/ 30 апреля 2019

Предполагая, что исходная кодировка текста совместима с 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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...