在 SQL Server 中本地解码 Base64 字符串

GWR*_*GWR 19 sql-server t-sql sql-server-2008-r2 cast string-manipulation

varchar在 SQL Server 的表中有一个列,其中包含一个 base64 编码的文本字符串,我想将其解码为纯文本等效项

SQL Server 是否具有处理此类事情的任何本机功能?

一个示例 base64 字符串:

cm9sZToxIHByb2R1Y2VyOjEyIHRpbWVzdGFtcDoxNDY4NjQwMjIyNTcxMDAwIGxhdGxuZ3tsYXRpdHVkZV9lNzo0MTY5ODkzOTQgbG9uZ2l0dWRlX2U3Oi03Mzg5NjYyMTB9IHJhZGl1czoxOTc2NA==
Run Code Online (Sandbox Code Playgroud)

解码为:

role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764
Run Code Online (Sandbox Code Playgroud)

GWR*_*GWR 27

弄清楚了:

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
Run Code Online (Sandbox Code Playgroud)

输出:

role:1 producer:12 timestamp:1468640222571000 latlng{latitude_e7:416989394 longitude_e7:-738966210} radius:19764
Run Code Online (Sandbox Code Playgroud)

只需换出BASE64_COL_NAME您的列名,或者如果您想使用声明的变量(例如,如果您正在制作一个函数或其他东西),您可以替换sql:column("BASE64_COLUMN")sql:variable("@base64variable")

它使用内置 XML 功能的 XSL 转换(自 SQL Server 2005 起)

  • 对于那些得到 NULL 的人,在您尝试解码的 base64String 末尾添加“==” (2认同)