我需要将varchar
转换为varbinary
。我正在使用的查询仅对某些值有效。
这个很好用
SELECT CONVERT (VARBINARY(MAX), 'AFE27AF97DC6', 2)
与此同时引发错误
将数据类型varchar转换为varbinary时出错
SELECT CONVERT (VARBINARY(MAX), 'AFEE27AF97DC6', 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