为了账号安全,请及时绑定邮箱和手机立即绑定

请问SQLServer 2005 T-SQL中的Base 64编码

/ 猿问

请问SQLServer 2005 T-SQL中的Base 64编码

若吾皇 2019-10-21 12:12:21

SQLServer 2005 T-SQL中的Base 64编码

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


查看完整描述

3 回答

?
幕布斯7119047

我知道这个问题已经得到了回答,但我只是花了比我更多的时间来完成这个任务,所以我会在这里分享它们,以防其他人也需要这样做:

-- Encode the string "TestData" in Base64 to get "VGVzdERhdGE="SELECT
    CAST(N'' AS XML).value(
          'xs:base64Binary(xs:hexBinary(sql:column("bin")))'
        , 'VARCHAR(MAX)'
    )   Base64EncodingFROM (
    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:十六进制()的参数。

我希望这能帮上忙!



查看完整回答
反对 回复 2019-10-22
?
幕布斯5086720

对于SQLServer 2012及以上版本,我能找到的最简单、最短的方法是BINARY BASE64 :

SELECT CAST('string' as varbinary(max)) FOR XML PATH(''), BINARY BASE64

对于base 64到String

SELECT CAST( CAST( 'c3RyaW5n' as XML ).value('.','varbinary(max)') AS varchar(max) )

(或nvarchar(max)对于Unicode字符串)



查看完整回答
反对 回复 2019-10-22
?
开满天机

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

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 @EncodeOutSELECT @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



查看完整回答
反对 回复 2019-10-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信