Я сталкивался с этим вопросом, когда искал решение аналогичной проблемы при печати шестнадцатеричного значения, возвращенного функцией «хэш-байты» в SQL Server 2005.
К сожалению, в этой версии SQL Server CONVERT, кажется, не работает вообще, только fn_varbintohexsubstring делает правильную вещь:
Я сделал:
DECLARE @binvalue binary(4)
SET @binvalue = 0x12345678
PRINT 'cast(@binvalue AS nvarchar): ' + CAST(@binvalue AS nvarchar)
PRINT 'convert(varchar(max), @binvalue, 0): ' + CONVERT(varchar(max), @binvalue, 0)
PRINT 'convert(varchar(max), @binvalue, 1): ' + CONVERT(varchar(max), @binvalue, 1)
PRINT 'convert(varchar(max), @binvalue, 2): ' + CONVERT(varchar(max), @binvalue, 2)
print 'master.sys.fn_varbintohexstr(@binvalue): ' + master.sys.fn_varbintohexstr(@binvalue)
Вот результат, который я получил в SQL Server 2005 (
cast(@binvalue AS nvarchar): 㐒硖
convert(varchar(max), @binvalue, 0): 4Vx
convert(varchar(max), @binvalue, 1): 4Vx
convert(varchar(max), @binvalue, 2): 4Vx
master.sys.fn_varbintohexstr(@binvalue): 0x12345678
(на самом деле перед '4Vx' есть непечатаемый символ - я опубликую изображение, но у меня пока недостаточно очков).
Редактировать : Просто для добавления - в SQL Server 2008 R2 проблема с CONVERT исправлена с помощью следующего вывода:
cast(@binvalue AS nvarchar): 㐒硖
convert(varchar(max), @binvalue, 0): 4Vx
convert(varchar(max), @binvalue, 1): 0x12345678
convert(varchar(max), @binvalue, 2): 12345678
master.sys.fn_varbintohexstr(@binvalue): 0x12345678