SQL Server преобразование varbinary в строку

Я хочу сделать преобразование в T-SQL из varbinary введите в строку type

вот пример :

сначала я получил этот varbinary

0x21232F297A57A5A743894A0E4A801FC3

и затем я хочу преобразовать его в

21232f297a57a5a743894a0e4a801fc3

как это сделать?

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