SQL Server конвертирует varbinary в строку

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

Вот пример:

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

0x21232F297A57A5A743894A0E4A801FC3

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

21232f297a57a5a743894a0e4a801fc3

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

Ответ 1

Try:

DECLARE @varbinaryField varbinary(max);
SET @varbinaryField = 0x21232F297A57A5A743894A0E4A801FC3;

SELECT CONVERT(varchar(max),@varbinaryField,2), 
@varbinaryField

ОБНОВЛЕНО: Для SQL Server 2008

Ответ 2

Я знаю, что это старый вопрос, но вот альтернативный подход, который я нашел более полезным в некоторых ситуациях. Я считаю, что функция master.dbo.fn_varbintohexstr доступна в SQL Server по крайней мере с SQL2K. Добавьте его сюда только для полноты. Некоторым читателям также может показаться поучительным взглянуть на исходный код этой функции.

declare @source varbinary(max);
set @source = 0x21232F297A57A5A743894A0E4A801FC3;
select varbin_source = @source
,string_result = master.dbo.fn_varbintohexstr (@source)

Ответ 3

Если вы хотите преобразовать одно значение VARBINARY в VARCHAR (STRING), вы можете сделать это, объявив такую ​​переменную:

DECLARE @var VARBINARY(MAX)
SET @var = 0x21232F297A57A5A743894A0E4A801FC3
SELECT CAST(@var AS VARCHAR(MAX))

Если вы пытаетесь выбрать из столбца таблицы, вы можете сделать следующее:

SELECT CAST(myBinaryCol AS VARCHAR(MAX))
FROM myTable

Ответ 4

Это работает как в SQL 2005, так и в 2008 году:

declare @source varbinary(max);
set @source = 0x21232F297A57A5A743894A0E4A801FC3;
select cast('' as xml).value('xs:hexBinary(sql:variable("@source"))', 'varchar(max)');

Ответ 5

Я везде искал ответ, и, наконец, это сработало для меня:

SELECT Lower(Substring(MASTER.dbo.Fn_varbintohexstr(0x21232F297A57A5A743894A0E4A801FC3), 3, 8000))

Выводит на (string):

21232f297a57a5a743894a0e4a801fc3

Вы можете использовать его в своих условиях WHERE или JOIN, а также в случае, если вы хотите сравнивать/сопоставлять varbinary records со строками

Ответ 6

Вот простой пример, который я написал для преобразования и преобразования с использованием методов 2-х преобразований, я также проверил его с фиксированной строкой

объявить @VB1 VARBINARY (500), @VB2 VARBINARY (500), @VB3 VARBINARY (500)

объявить @S1 VARCHAR (500)

SET @VB1 = HASHBYTES ('SHA1', 'Test')

SET @S1 = CONVERT (varchar (500), @VB1,2)

SET @VB2 = CONVERT (varbinary (500), @S1,2)

SET @VB3 = CONVERT (varbinary (500), '640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA', 2)

SELECT @VB1, @S1, @VB2, @VB3

IF @VB1 = @VB2 PRINT 'Они соответствуют (2)'

IF @VB1 = @VB3 PRINT 'Они соответствуют (3)'

PRINT str (Len (@VB1))

PRINT str (Лен (@S1))

PRINT str (Len (@VB2))

SET @VB1 = HASHBYTES ('SHA1', 'Test')

SET @S1 = CONVERT (varchar (500), @VB1,1)

SET @VB2 = CONVERT (varbinary (500), @S1,1)

SELECT @VB1, @S1, @VB2

IF @VB1 = @VB2 PRINT 'Они соответствуют (1)'

PRINT str (Len (@VB1))

PRINT str (Лен (@S1))

PRINT str (Len (@VB2))

и выход

||| 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA

(затронуты 1 строка (ы))

Они соответствуют (2)

Они соответствуют (3)

    20
    40
    20

|| 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA | 0x640AB2BAE07BEDC4C163F679A746F7AB7FB5D1FA

(затронуты 1 строка (ы))

Они соответствуют (1)

    20
    42
    20