3

我正在使用 Microsoft SQL Server(如果重要,请使用 2008 R2)

当我执行

select LEN('test')

我按预期得到 4

但现在试试这个:

declare @s varchar
set @s='test'
select LEN(@s)

结果是... 1

它实际上是如何工作的?

4

3 回答 3

5

那是因为如果你要

SELECT @s 

它会回来

t

只要。您需要指定长度。

char 和 varchar (Transact-SQL)

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

SQL 小提琴演示

于 2013-10-03T12:17:51.283 回答
5

当你定义这个时:

declare @s varchar

你得到一个恰好一个字符长度varchar的a 。

绝对没有错LEN

您需要做的是在定义变量时指定显式长度varchar

declare @s varchar(20)
set @s='test'
select LEN(@s)

LEN 现在你应该从...取回 4

注意:推荐的最佳实践是在使用时始终指定长度varchar- 否则您会遇到这些意外。……

于 2013-10-03T12:18:42.097 回答
1

您必须将其声明为具有超过 1 个字符的 nvarchar 试试这个,它可以工作:

declare @s nvarchar(100)
于 2013-10-03T12:21:42.827 回答