在SQL Server中将VarChar转换为VarBinary时出错

时间:2019-06-09 11:40:14

标签: sql sql-server database

我需要将varchar转换为varbinary。我正在使用的查询仅对某些值有效。

这个很好用

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

与此同时引发错误

  

将数据类型varchar转换为varbinary时出错

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

我需要使用样式2。

我已经阅读了所有类似的问题,但是找不到解决方案。任何想法都会帮助我。谢谢!

2 个答案:

答案 0 :(得分:2)

嗯,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 :(得分:1)

documentation中明确指出了这一点:

  

1、2 [对于第三个参数]

     

对于二进制data_type,表达式必须是字符表达式。表达式必须具有偶数个十六进制数字(0、1、2、3、4、5、6、7、8、9,A,B,C,D,E,F,a,b,c,d ,e,f)。

您的第一个字符串的长度为12,因此可以正常转换。第二个长度为13,因此无效。

我不确定您打算做什么,但是在第三个位置的0对于两次转换给出的结果相似:

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

礼物:

0xAFE27AF97DC6  0xAF0EE27AF97DC6