varbin的len

时间:2010-09-07 18:45:19

标签: sql sql-server-2005

有人请解释为什么选择len(0x0a000b)返回3? len计算字节数?为什么选择左(0x0a000b,1)什么都不返回?我期望0x0a(如果len计数字节)...

我正在使用mssql 2005

感谢 康斯坦丁

3 个答案:

答案 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)