我尝试根据firstName
和lastName
列的连接搜索表格。这两个都定义为NVARCHAR(50) NOT NULL
查询有时无法找到匹配项,因为连接列用额外的空格填充。这是查询:
SELECT firstName + lastName AS fullName, LEN(firstName) + LEN(lastName) AS realLength, LEN(firstName + lastName) AS concatLength FROM UsersTable
这是一张带有结果的图片:
这是什么处理?我怎样才能避免多余的空间?如果我SELECT RTRIM(firstName) + RTRIM(lastName) ...
我得到了正确的全名而没有多余的空格,但使用RTRIM
太贵了,因为我的数据集非常大。这会让我认为问题是数据本身,除了LEN(firstName)
与LEN(RTRIM(firstName))
相同
答案 0 :(得分:3)
FirstName
末尾有空格。很容易检查以下内容返回4:
select len(N'abcd ')
这是varchar()
数据类型和len()
的属性。当然,当你连接它们时,然后 SQL Server决定识别最后的空格。
此行为记录在documentation:
的“备注”部分中<强>说明强>
LEN
排除了尾随空白。如果这是一个问题,请考虑使用DATALENGTH
(Transact-SQL)函数,不修剪字符串。如果 处理一个unicode字符串,DATALENGTH
将返回两倍的数字 的人物。
正如评论所示,在连接它们之前,您可以ltrim()
/ rtrim()
。或者,使用like
。