为什么 RTRIM 在右侧空间的 where 条件下不起作用

问题描述 投票:0回答:1

我在 Transact-SQL 中有一个临时表,有 2 列。我将数据插入到表格中,值的右侧有空格,如下所示

insert into #temp  ([ACCESS],[USER_ID]) values ('ABC','MGD\info    ')

使用 RTRIM 函数的验证查询没有给出这些右侧间隔值的结果。

select count(*) from #temp where RTRIM([USER_ID])<>[USER_ID]

“上述查询的预期结果应该是 1 行。而查询给出 0 条记录。

我尝试通过直接提及值中的空格来显示相同的内容,如下面的查询所示,它显示 1 行:

 select [ACCESS],[USER_ID] from #temp where [USER_ID]='MGD\info    '

我也尝试了 LTRIM 的类似步骤,它工作正常,但同样不适用于 RTRIM”

sql sql-server t-sql
1个回答
0
投票

字符串比较忽略尾随空格。您可以使用

DATALENGTH()
来比较修剪前后的真实存储长度(以字节为单位)。 (请注意,无法使用
LEN()
,因为它也会忽略尾随空格。)

select count(*)
from #temp
where DATALENGTH(RTRIM(USER_ID)) <> DATALENGTH(USER_ID)

参见这个数据库<>小提琴

© www.soinside.com 2019 - 2024. All rights reserved.