msSql hex в base64
У меня есть база данных sql с изображениями jpeg, хранящимися в шестнадцатеричном формате (0xFFD8...) Есть ли способ сделать запрос, где результат будет в base64 вместо Hex?
Попробовал Google, но я не могу найти ничего подобного:/
2 ответа
Вы можете преобразовать hex в varbinary, используя сам синтаксический анализатор sql:
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 выполнить динамический SQL, содержащий литерал 0x012345, который синтаксический анализатор T-SQL прекрасно понимает. Затем вы можете передать результаты этого в трюк XML, на который ссылается @EdHarper, как показано ниже:
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;