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
它是如何实际工作的?
那是因为如果你去的话
SELECT @s
Run Code Online (Sandbox Code Playgroud)
它会回来
t
Run Code Online (Sandbox Code Playgroud)
只要.您需要指定长度.
如果未在数据定义或变量声明语句中指定n,则默认长度为1.如果在使用CAST和CONVERT函数时未指定n,则默认长度为30.
当你定义这个时:
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- 否则您会遇到此类意外。....