Я хочу сделать преобразование в T-SQL из типа varbinary
в тип строки
Вот пример:
Сначала я получил это varbinary
0x21232F297A57A5A743894A0E4A801FC3
И затем я хочу преобразовать его в
21232f297a57a5a743894a0e4a801fc3
Как это сделать?
Я хочу сделать преобразование в T-SQL из типа varbinary
в тип строки
Вот пример:
Сначала я получил это varbinary
0x21232F297A57A5A743894A0E4A801FC3
И затем я хочу преобразовать его в
21232f297a57a5a743894a0e4a801fc3
Как это сделать?
Try:
DECLARE @varbinaryField varbinary(max);
SET @varbinaryField = 0x21232F297A57A5A743894A0E4A801FC3;
SELECT CONVERT(varchar(max),@varbinaryField,2),
@varbinaryField
ОБНОВЛЕНО: Для SQL Server 2008
Я знаю, что это старый вопрос, но вот альтернативный подход, который я нашел более полезным в некоторых ситуациях. Я считаю, что функция 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)
Если вы хотите преобразовать одно значение 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))
Выводит на (string):
21232f297a57a5a743894a0e4a801fc3
Вы можете использовать его в своих условиях WHERE или JOIN, а также в случае, если вы хотите сравнивать/сопоставлять varbinary records со строками
Вот простой пример, который я написал для преобразования и преобразования с использованием методов 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