Преобразование в 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