【问题标题】:Why does SQL LEN function return '1' for a string with several characters?为什么 SQL LEN 函数对包含多个字符的字符串返回“1”?
【发布时间】:2013-05-24 01:45:12
【问题描述】:
简单的问题 - 为什么当我在下面的查询中打印 @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
【问题讨论】:
标签:
sql
tsql
sql-server-2008-r2
【解决方案1】:
您对@string 的声明是错误的。您在varchar 上没有长度。
试试这个:
declare @string varchar(255); -- or whatever
您刚刚了解到这种情况下的默认值为 1。
这在documentation 中有明确规定。进一步说明,MS SQL 似乎使这变得相当复杂:
当 n 未在数据定义或变量声明中指定时
语句,默认长度为1。当n未指定时使用
CAST 和 CONVERT 函数,默认长度为 30。
正确的习惯是在使用varchar 或nvarchar 时始终包含长度。
【解决方案2】:
你需要给变量@string 一个实际的长度。打印变量@string,它可能会返回'C'。
【解决方案3】:
因为没有指定长度的varChar 被视为varChar(1)
将varchar 替换为varChar(30) 或varChar(max)