为什么SQL LEN函数对于包含多个字符的字符串返回“1”?

时间:2013-05-28 23:16:08

标签: sql tsql sql-server-2008-r2

简单的问题 - 为什么当我在下面的查询中打印@len变量的值时,我会得到值1而不是12(指定字符串中的字符数)?

DECLARE @string varchar
DECLARE @index int
DECLARE @len int
DECLARE @char char(1)
SET @string = 'content loop'
SET @index = 1
SET @len= LEN(@string)

print @len

3 个答案:

答案 0 :(得分:8)

您对@string的声明是错误的。 varchar上没有长度。

试试这个:

declare @string varchar(255);   -- or whatever

您刚刚获悉此情况下的默认值为1.

documentation中明确指出了这一点。另外需要注意的是,MS SQL似乎使这变得相当复杂:

  

在数据定义或变量声明中未指定n时   声明,默认长度为1.使用时未指定n   CAST和CONVERT函数,默认长度为30。

正确的习惯是在使用varcharnvarchar时始终包含长度。

答案 1 :(得分:2)

您需要为变量@string赋予实际长度。打印变量@string,它可能会返回'C'。

答案 2 :(得分:2)

因为没有长度规范的varChar被视为varChar(1)

varchar替换为varChar(30)varChar(max)