Decodificar a seqüência Base64 nativamente no SQL Server

15

Eu tenho uma varcharcoluna em uma tabela no SQL Server que contém uma cadeia de texto codificada em base64 que eu gostaria de decodificar em seu equivalente em texto sem formatação

O SQL Server tem alguma funcionalidade nativa para lidar com esse tipo de coisa?

Uma sequência base64 de amostra:

cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA==

Que decodifica para:

role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764
GWR
fonte

Respostas:

20

Descobri isso:

SELECT 
    CONVERT
    (
        VARCHAR(MAX), 
        CAST('' AS XML).value('xs:base64Binary(sql:column("BASE64_COLUMN"))', 'VARBINARY(MAX)')
    ) AS RESULT
FROM
    (
        SELECT 'cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA==' AS BASE64_COLUMN
    ) A

Resultado:

role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764

Basta trocar BASE64_COL_NAMEo nome da coluna ou substituí-lo sql:column("BASE64_COLUMN")por sql:variable("@base64variable")se você quiser usar uma variável declarada, por exemplo, se estiver criando uma função ou algo assim.

Utiliza uma transformação XSL usando a funcionalidade XML incorporada (desde o SQL Server 2005)

GWR
fonte