2

简单的问题 - 为什么当我@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
4

3 回答 3

8

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

尝试这个:

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

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

这在文档中有明确规定。进一步说明,MS SQL 似乎使这变得相当复杂:

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

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

于 2013-05-28T23:17:44.767 回答
2

您需要给变量@string 一个实际长度。打印变量@string,它可能会返回'C'。

于 2013-05-28T23:18:42.993 回答
2

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

替换varcharvarChar(30)varChar(max)

于 2013-05-28T23:19:31.877 回答