如何在SQL中将16位十进制值转换为ASCII字符?
解决SQL中16位十进制值转ASCII字符的问题
针对你遇到的16位十进制值转ASCII字符时出现多余前导0的问题,提供几种直接的解决方法:
方法1:指定VarBinary长度为2
因为1-2个ASCII字符对应2字节(16位),直接将十进制值转为VARBINARY(2),就能自动截断高位的填充0,再转VARCHAR即可得到目标字符:
SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(2), 16705))
执行后会直接返回AA。
方法2:位运算保留低16位
通过位与运算& 0xFFFF保留数值的低16位,过滤掉高位的无效0,再进行转换:
SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), 16705 & 0xFFFF))
这种方法适合不确定数值是否存在高位冗余的场景,确保只处理16位有效数据。
方法3:截取十六进制有效位
先将十进制转为十六进制字符串,截取后4位(对应2字节),再转回二进制后转字符:
SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), RIGHT('0000' + CONVERT(VARCHAR(8), 16705, 2), 4), 2))
此方法通过字符串处理精准提取有效部分,兼容性较好。
内容的提问来源于stack exchange,提问作者PenMonk
相关产品推荐
相关产品推荐

