msSql hex到base64

时间:2017-01-20 07:40:15

标签: sql sql-server sql-server-2008 mssql-jdbc

我有一个sql数据库,jpeg图像存储为十六进制(0xFFD8 ...) 有没有办法进行查询,结果将在base64而不是Hex?

试图谷歌,我找不到类似的东西:/

2 个答案:

答案 0 :(得分:5)

您可以通过利用sql解析器本身将hex转换为varbinary:

DECLARE @TestBinHex varchar(max), @TestBinary varbinary(max), @Statement nvarchar(max);
SELECT @TestBinHex = '0x012345';
SELECT @Statement = N'SELECT @binaryResult = ' + @TestBinHex;
EXECUTE sp_executesql @Statement, N'@binaryResult varbinary(max) OUTPUT', @binaryResult=@TestBinary OUTPUT;
SELECT @TestBinary

这将使sp_executesql执行包含文字0x012345的动态SQL,T-SQL解析器可以很好地理解它。然后,您可以将结果提供给@EdHarper引用的XML技巧,如下所示:

DECLARE @TestBinHex varchar(max), @TestBinary varbinary(max), @Statement nvarchar(max);
SELECT @TestBinHex = '0x012345';
SELECT @Statement = N'SELECT @binaryResult = ' + @TestBinHex;
EXECUTE sp_executesql @Statement, N'@binaryResult varbinary(max) OUTPUT', @binaryResult=@TestBinary OUTPUT;

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

答案 1 :(得分:0)

这是一个包含存储为十六进制的图像的表的示例:

create table t (s image,s_base64 varchar(max));
insert t(s)
values(CAST('This is an image column' as image));

以下是将十六进制图像转换为base64

的示例
 create view v
 as
 select CAST(s as varbinary(max)) as s,s_base64 from t;
 GO
 update v set s_base64= CAST(N'' AS xml).value('xs:base64Binary(sql:column("v.s"))', 'varchar(max)');
 GO

 select * from v;