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

Chr*_*row 2 sql t-sql 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
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 8

你的声明@string是错误的.你没有长度varchar.

试试这个:

declare @string varchar(255);   -- or whatever
Run Code Online (Sandbox Code Playgroud)

您刚刚了解到这种情况下的默认值为1.

这在文档中明确说明.另外需要注意的是,MS SQL似乎使这个变得相当复杂:

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

正确的习惯是在使用varchar或时使用长度nvarchar.