2014-10-01 2 views
0

Я работаю с базой данных, которая кодирует строки в шестнадцатеричные, а затем заполняет всю строку с помощью 0.Вставка/удаление шестиугольника с помощью SQL Server 2008 R2?

Как это:

Origional String:   PartitionTest 
JUST Hex-encoded Strring: 0x506172746974696f6e54657374 
The output I see:   0x50006100720074006900740069006F006E005400650073007400 

Есть в любом случае для меня, чтобы удалить пробелы и декодировать окончательную строку обратно в текст? И, как бы я затем закодировать этот текст обратно в дополненную строку? Я уже конвертирую строку в шестнадцатеричную с

SELECT 
    MASTER.dbo.fn_varbintohexstr(CAST('PartitionTest' AS VARBINARY)) 

, но у меня нет подсказки, как это сделать.

Спасибо!

+0

Итак, вам нужно засунуть 00 после каждых двух символов, начиная с третьего? Что совершенно странно. Вы можете сделать это с помощью STUFF. –

ответ

0

EDIT: В качестве входных данных используется varbinary, необходимо сначала преобразовать его в varchar для использования STUFF.

Declare @input varbinary(128) = 0x50006100720074006900740069006F006E005400650073007400 
Declare @Temp as VARCHAR(350) 
Set @Temp = CONVERT(VARCHAR(350), @input ,2) 
declare @length int 
set @length = len(@Temp) 
select @length 
declare @i int = 3 


WHILE @i < @length/2+2 
BEGIN 
    Set @Temp = Stuff(@Temp, @i, 2, '') 
    set @i = @i +2 

END 

select '0x' + @Temp 
+0

Это отлично подходит для удаления прокладки, но что я могу использовать, чтобы добавить его обратно? Спасибо! –

+0

Думаю, я могу сделать что-то вроде 'CONVERT (VARCHAR (128), (SELECT [FLDVALUE] FROM TABLE WHERE RESOURCE_TYPE = 4), 1)', а затем, при необходимости, конвертировать обратно в VARBINARY. –

+0

Кроме того, я просто попытался изменить ваш ответ следующим образом: SET @Temp = (SELECT [FLDVALUE] FROM TABLE WHERE RESOURCE_TYPE = 4), и по какой-то причине результатом вашего ответа является буква, которую первая кодированная буква (0x50) представляет , Результатом является один элемент из столбца, обозначенного как VARBINARY (128). Должен ли я преобразовать в другой тип, прежде чем запускать его через ответ? –

Смежные вопросы