首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL Server2005T-SQL中的Base64编码

SQL Server2005T-SQL中的Base64编码
EN

Stack Overflow用户
提问于 2011-02-23 02:37:37
回答 10查看 197.3K关注 0票数 135

我想编写一个T-SQL查询,将一个字符串编码为Base64字符串。令人惊讶的是,我找不到任何用于进行Base64编码的原生T-SQL函数。是否存在本机函数?如果不是,在T-SQL中进行Base64编码的最佳方式是什么?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-11-24 02:14:58

我知道这个问题已经得到了回答,但我花了比我愿意承认的更多的时间想出了单行SQL语句来完成这个任务,所以我将在这里分享它们,以防其他人需要做同样的事情:

代码语言:javascript
运行
复制
-- Encode the string "TestData" in Base64 to get "VGVzdERhdGE="
SELECT
    CAST(N'' AS XML).value(
          'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
        , 'VARCHAR(MAX)'
    )   Base64Encoding
FROM (
    SELECT CAST('TestData' AS VARBINARY(MAX)) AS bin
) AS bin_sql_server_temp;

-- Decode the Base64-encoded string "VGVzdERhdGE=" to get back "TestData"
SELECT 
    CAST(
        CAST(N'' AS XML).value(
            'xs:base64Binary("VGVzdERhdGE=")'
          , 'VARBINARY(MAX)'
        ) 
        AS VARCHAR(MAX)
    )   ASCIIEncoding
;

我必须在第一个(编码)查询中使用子查询生成的表,因为我找不到任何方法将原始值("TestData")转换为它的十六进制字符串表示("5465737444617461"),以便作为XQuery语句中xs:hexBinary()的参数。

我希望这对某些人有帮助!

票数 200
EN

Stack Overflow用户

发布于 2015-08-27 00:22:02

对于SQL Server2012及更高版本,我能找到的最简单、最快捷的方法是BINARY BASE64

代码语言:javascript
运行
复制
SELECT CAST('string' as varbinary(max)) FOR XML PATH(''), BINARY BASE64

对于Base64 to string

代码语言:javascript
运行
复制
SELECT CAST( CAST( 'c3RyaW5n' as XML ).value('.','varbinary(max)') AS varchar(max) )

(对于Unicode字符串,则为nvarchar(max) )

票数 107
EN

Stack Overflow用户

发布于 2012-07-07 03:51:23

这是对mercurial答案的修改,在解码时也使用子查询,允许在两个实例中使用变量。

代码语言:javascript
运行
复制
DECLARE
    @EncodeIn VARCHAR(100) = 'Test String In',
    @EncodeOut VARCHAR(500),
    @DecodeOut VARCHAR(200)    

SELECT @EncodeOut = 
    CAST(N'' AS XML).value(
          'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
        , 'VARCHAR(MAX)'
    )
FROM (
    SELECT CAST(@EncodeIn AS VARBINARY(MAX)) AS bin
) AS bin_sql_server_temp;

PRINT @EncodeOut

SELECT @DecodeOut = 
CAST(
    CAST(N'' AS XML).value(
        'xs:base64Binary(sql:column("bin"))'
      , 'VARBINARY(MAX)'
    ) 
    AS VARCHAR(MAX)
) 
FROM (
    SELECT CAST(@EncodeOut AS VARCHAR(MAX)) AS bin
) AS bin_sql_server_temp;

PRINT @DecodeOut
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5082345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档