T-SQL Len功能无法按预期工作

RRM*_*RRM 2 sql t-sql sql-server-2008-r2

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

当我执行

select LEN('test')
Run Code Online (Sandbox Code Playgroud)

我按预期得到4分

但现在试试这个:

declare @s varchar
set @s='test'
select LEN(@s)
Run Code Online (Sandbox Code Playgroud)

结果是...... 1

它是如何实际工作的?

Adr*_*der 5

那是因为如果你去的话

SELECT @s 
Run Code Online (Sandbox Code Playgroud)

它会回来

t
Run Code Online (Sandbox Code Playgroud)

只要.您需要指定长度.

来自char和varchar(Transact-SQL)

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

SQL Fiddle DEMO


mar*_*c_s 5

当你定义这个时:

declare @s varchar
Run Code Online (Sandbox Code Playgroud)

你得到的 avarchar恰好是一个字符长度

绝对没有什么问题啊LEN

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

declare @s varchar(20)
set @s='test'
select LEN(@s)
Run Code Online (Sandbox Code Playgroud)

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

注意:建议的最佳实践是在使用时始终指定长度varchar- 否则您会遇到此类意外。....