我有一个SQL Server数据库,其中包含以十六进制形式存储的jpeg图像(0xFFD8...)。是否有一种方法可以执行查询,使结果是以base64而不是十六进制的形式呈现?
我尝试过谷歌搜索,但好像找不到相关的内容 :/
我有一个SQL Server数据库,其中包含以十六进制形式存储的jpeg图像(0xFFD8...)。是否有一种方法可以执行查询,使结果是以base64而不是十六进制的形式呈现?
我尝试过谷歌搜索,但好像找不到相关的内容 :/
您可以利用sql解析器将十六进制转换为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
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;
这是一个包含以十六进制存储的图像的表格示例:
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;