我想编写一个T-SQL查询,将一个字符串编码为Base64字符串。令人惊讶的是,我找不到任何用于进行Base64编码的原生T-SQL函数。是否存在本机函数?如果不是,在T-SQL中进行Base64编码的最佳方式是什么?
发布于 2011-11-24 02:14:58
我知道这个问题已经得到了回答,但我花了比我愿意承认的更多的时间想出了单行SQL语句来完成这个任务,所以我将在这里分享它们,以防其他人需要做同样的事情:
-- 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()的参数。
我希望这对某些人有帮助!
发布于 2015-08-27 00:22:02
对于SQL Server2012及更高版本,我能找到的最简单、最快捷的方法是BINARY BASE64:
SELECT CAST('string' as varbinary(max)) FOR XML PATH(''), BINARY BASE64对于Base64 to string
SELECT CAST( CAST( 'c3RyaW5n' as XML ).value('.','varbinary(max)') AS varchar(max) )(对于Unicode字符串,则为nvarchar(max) )
发布于 2012-07-07 03:51:23
这是对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 @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 @DecodeOuthttps://stackoverflow.com/questions/5082345
复制相似问题