SQL Server преобразование varbinary в строку
6 ответов
попробуй:
DECLARE @varbinaryField varbinary(max);
SET @varbinaryField = 0x21232F297A57A5A743894A0E4A801FC3;
SELECT CONVERT(varchar(max),@varbinaryField,2),
@varbinaryField
обновление: Для SQL Server 2008
Я знаю, это старый вопрос, но вот альтернативный подход, который я нашел более полезным в некоторых ситуациях. Я верю мастеру.dbo.функция fn_varbintohexstr доступна в SQL Server по крайней мере с SQL2K. Добавляя его здесь просто для полноты. Некоторые читатели также могут счесть полезным взглянуть на исходный код этой функции.
declare @source varbinary(max);
set @source = 0x21232F297A57A5A743894A0E4A801FC3;
select varbin_source = @source
,string_result = master.dbo.fn_varbintohexstr (@source)
если вы хотите преобразовать один VARBINARY
стоимостью в VARCHAR
(STRING
) вы можете сделать, объявив такую переменную:
DECLARE @var VARBINARY(MAX)
SET @var = 0x21232F297A57A5A743894A0E4A801FC3
SELECT CAST(@var AS VARCHAR(MAX))
если вы пытаетесь выбрать из столбца таблицы, то можно сделать вот так:
SELECT CAST(myBinaryCol AS VARCHAR(MAX))
FROM myTable
это работает как в SQL 2005, так и в 2008:
declare @source varbinary(max);
set @source = 0x21232F297A57A5A743894A0E4A801FC3;
select cast('' as xml).value('xs:hexBinary(sql:variable("@source"))', 'varchar(max)');
Я везде искал ответ, и, наконец, это сработало для меня:
SELECT Lower(Substring(MASTER.dbo.Fn_varbintohexstr(0x21232F297A57A5A743894A0E4A801FC3), 3, 8000))
выходов (строк):
21232f297a57a5a743894a0e4a801fc3
вы можете использовать его в своих условиях WHERE или JOIN, а также в случае, если вы хотите сравнить/сопоставить записи varbinary со строками
вот простой пример, который я написал, чтобы конвертировать и конвертировать обратно с помощью методов 2 convert, я также проверил его с фиксированной строкой
объявить @VB1 VARBINARY (500),@VB2 VARBINARY(500),@VB3 VARBINARY(500)
объявить @S1 VARCHAR (500)
SET @VB1=HASHBYTES ('SHA1','Test')
установить @S1=преобразовать(varchar (500),@VB1,2)
установить @VB2=конвертировать(varbinary (500),@S1,2)
установить @VB3=конвертировать (varbinary (500),'640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA', 2)
выберите @VB1,@S1,@VB2,@VB3
Если @VB1=@VB2 печать ' они соответствуют(2)'
Если @VB1=@VB3 печать ' они соответствуют(3)'
PRINT str (Len (@VB1))
PRINT str (Len (@S1))
PRINT str (Len (@VB2))
SET @VB1=HASHBYTES ('SHA1','Test')
установить @S1=конвертировать(varchar (500),@VB1,1)
установить @VB2=конвертировать (varbinary (500),@S1, 1)
выберите @VB1,@S1,@VB2
Если @VB1=@VB2 печать ' они соответствуют(1)'
PRINT str (Len (@VB1))
PRINT str (Len (@S1))
PRINT str (Len (@VB2))
и вывода
||| 0x640AB2BAE07BEDC4C163F679A746F7ab7fb5d1fa|640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA|0x640AB2BAE07BEDC4C163F679A746F7ab7fb5d1fa|0x640AB2BAE07BEDC4C163F679A746F7ab7fb5d1fa
(1 ряд(ов) affected)
Они Соответствуют (2)
Они Соответствуют(3)
20
40
20
|| 0x640AB2BAE07BEDC4C163F679A746F7ab7fb5d1fa|0x640AB2BAE07BEDC4C163F679A746F7ab7fb5d1fa|0x640AB2BAE07BEDC4C163F679A746F7ab7fb5d1fa
(1 ряд(ов), пострадавших)
Они Соответствуют(1)
20
42
20