Decode Base64 String Natively in SQL Server
-
10-10-2020 - |
Question
I have a varchar
column in a table in SQL Server which hold a base64-encoded text string which I would like to decode into it's plain text equivalent
Does SQL Server have any native functionality to handle this type of thing?
A sample base64 string:
cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA==
Which decodes to:
role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764
Solution
Figured it out:
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
Output:
role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764
Just swap out BASE64_COL_NAME
for your column name, or you can replace sql:column("BASE64_COLUMN")
with sql:variable("@base64variable")
if you want to use a declared variable e.g. if you are making a function or something.
It makes use of an XSL transform using built-in XML functionality (since SQL Server 2005)
Licensed under: CC-BY-SA with attribution
Not affiliated with dba.stackexchange