LEN(firstName)+ LEN(lastName)不等于LEN(firstName + lastName)

时间:2016-09-08 20:14:52

标签: sql sql-server

我尝试根据firstNamelastName列的连接搜索表格。这两个都定义为NVARCHAR(50) NOT NULL

查询有时无法找到匹配项,因为连接列用额外的空格填充。这是查询:

SELECT firstName + lastName AS fullName, LEN(firstName) + LEN(lastName) AS realLength, LEN(firstName + lastName) AS concatLength FROM UsersTable

这是一张带有结果的图片:

Query results

这是什么处理?我怎样才能避免多余的空间?如果我SELECT RTRIM(firstName) + RTRIM(lastName) ...我得到了正确的全名而没有多余的空格,但使用RTRIM太贵了,因为我的数据集非常大。这会让我认为问题是数据本身,除了LEN(firstName)LEN(RTRIM(firstName))相同

1 个答案:

答案 0 :(得分:3)

FirstName末尾有空格。很容易检查以下内容返回4:

select len(N'abcd    ')

这是varchar()数据类型和len()的属性。当然,当你连接它们时,然后 SQL Server决定识别最后的空格。

此行为记录在documentation

的“备注”部分中
  

<强>说明

     

LEN排除了尾随空白。如果这是一个问题,请考虑使用   DATALENGTH(Transact-SQL)函数,不修剪字符串。如果   处理一个unicode字符串,DATALENGTH将返回两倍的数字   的人物。

正如评论所示,在连接它们之前,您可以ltrim() / rtrim()。或者,使用like