有人请解释为什么选择len(0x0a000b)返回3? len计算字节数?为什么选择左(0x0a000b,1)什么都不返回?我期望0x0a(如果len计数字节)...
我正在使用mssql 2005
感谢 康斯坦丁
答案 0 :(得分:5)
select len(0x0a000b)
返回由三个字节0x0a,0x00和0x0b表示的字符串的长度。
select left(0x0a000b, 1)
返回字符串最左边的字符,这是一个换行符。
请注意,select case when left(0x0a000b, 1) = 0x0a then 1 else 0 end
会返回1
,这表示您确实获得了换行符。
修改:有关其他详细信息,请参阅以下评论。
答案 1 :(得分:3)
左是字符串运算符,因此它不会像预期的那样对二进制数据起作用,而是使用substring(@v,1,1)
另一方面,len 返回二进制数据的长度(除了其他数据类型);虽然,字符串有一个非常有趣的例外,当我们使用这个命令测量字符串的长度时,它首先对它执行rtrim;所以len('a')会返回1
答案 2 :(得分:1)
有人请解释为什么选择len(0x0a000b)返回3
是3个字符
0x表示它是二进制
0a字符1
00字符2
0b字符3
你有一个不可打印的角色,我相信0a是一个回车,运行这个
select left(0x45000b, 1)