Преобразование в Base64 и обратно
Хочу поделиться способом преобразования строки в Base64 и обратно. Сразу оговорюсь, что способ не самый быстрый, но главное его преимущество в том, что он работает прямо «из коробки» без применения специальных CLR функций. Нам потребуется тестовая база данных и таблица для примера:
use[master];
go
ifdb_id('Base64_test')is not null
beginalterdatabase[Base64_test]set single_user withrollbackimmediate;
dropdatabase[Base64_test];
end
go
createdatabase[Base64_test];
go
use[Base64_test];
createtable[dbo].[Base64_test]([plain_text]nvarchar(max),
[base64_text]nvarchar(max));
go
insertinto[dbo].[Base64_test]([plain_text], [base64_text])values(N'My Test String', N'TQB5ACAAVABlAHMAdAAgAFMAdAByAGkAbgBnAA==');
go
Пример конвертации строки в Base64:
-- Конвертируем значение переменной
declare @value varbinary(max);
set @value = cast(N'My Test String' as varbinary(max));
select cast(N'' as xml).value('xs:base64Binary(sql:variable("@value"))', 'varchar(max)') as [encoded_value]; go
-- Конвертируем значение столбца в таблице
select cast(N'' as xml).value('xs:base64Binary(sql:column("plain_text"))', 'varchar(max)') as [encoded_value] from
(select cast([plain_text] as varbinary(max)) as [plain_text] from [dbo].[Base64_test] ) as tmp;
go
Пример обратного преобразования:
-- Конвертируем значение
select cast(cast(N'' as xml).value('xs:base64Binary("TQB5ACAAVABlAHMAdAAgAFMAdAByAGkAbgBnAA==")', 'varbinary(max)') as nvarchar(max)) as [decoded_value];
go
-- Конвертируем значение переменной
declare @value varchar(max)
set @value = 'TQB5ACAAVABlAHMAdAAgAFMAdAByAGkAbgBnAA=='
select cast(cast(N'' as xml).value('xs:base64Binary(sql:variable("@value"))', 'varbinary(max)') as nvarchar(max)) as [decoded_value];
go
-- Конвертируем значение столбца в таблице
select cast(cast(N'' as xml).value('xs:base64Binary(sql:column("base64_text"))', 'varbinary(max)') as nvarchar(max)) as [decoded_value]
В Microsoft Bing добавлены инструменты кодировки HTML, URL и Base64
Обратная связь