Ошибка преобразования VarChar в VarBinary в SQL Server - PullRequest
2 голосов
/ 09 июня 2019

Мне нужно конвертировать varchar в varbinary. Используемый мной запрос корректно работает только для некоторых значений.

Этот работает нормально

SELECT CONVERT (VARBINARY(MAX), 'AFE27AF97DC6', 2)

пока этот выдает ошибку

Ошибка преобразования типа данных varchar в varbinary

SELECT CONVERT (VARBINARY(MAX), 'AFEE27AF97DC6', 2)

Мне нужно использовать стиль 2.

Я прочитал все подобные вопросы, но не смог найти решение. Любая мысль поможет мне. Спасибо!

Ответы [ 2 ]

2 голосов
/ 09 июня 2019

Хм, AFEE27AF97DC6 на один клочок, и кажется, что принимаются только полные байты. Попробуйте обнулить это. Э.Г.

SELECT convert(varbinary(max), '0AFEE27AF97DC6', 2)

Вы также можете заключить его в выражение CASE, проверяя, имеет ли строка четную или нечетную длину, если строки являются переменными.

SELECT convert(varbinary(max),
               CASE
                 WHEN len('AFEE27AF97DC6') % 2 <> 0 THEN
                   concat('0', 'AFEE27AF97DC6')
                 ELSE
                   'AFEE27AF97DC6'
               END,
               2)

(Замените литералы своей переменной.)

1 голос
/ 09 июня 2019

Это довольно четко указано в документации :

1, 2 [для третьего аргумента]

Для двоичного типа данных выражение должно быть символьным выражением. Выражение должно иметь четное число шестнадцатеричных цифр (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d , е, е).

Ваша первая строка имеет длину 12, поэтому она отлично преобразуется. Второй имеет длину 13, поэтому он недействителен.

Я не уверен, что вы намереваетесь, но 0 в 3-й позиции дает аналогичные результаты для двух преобразований:

SELECT CONVERT(varbinary(max),'AFE27AF97DC6' , 2), CONVERT(varbinary(max),'AF0EE27AF97DC6' , 2) 

Дает:

0xAFE27AF97DC6  0xAF0EE27AF97DC6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...