Microsoft SQL Server以不同方式处理前导和尾随空格?

时间:2015-01-17 04:15:10

标签: sql

我观察到sql能够匹配像'4280'这样的值,如果匹配'4280',但是当搜索到10442时它没有检测到'10442'

请参阅以下查询

CREATE TABLE Persons
(
PersonID int,
myval varchar(255),
);

select * from Persons

insert into Persons values(1,'aftab')
insert into Persons values(2,'    10442')
insert into Persons values(3,'4280 ')

/* It does not retrieve the row which has myal '10442' */
select * from Persons where myval='10442'

/* It does retrieve the row which has myal '4280' in spite of the trailing spaces*/
select * from Persons where myval='4280'

我原本期望尾随和前导空格都被视为相同,即检测到“10442”和“4280”,或者两者都未被检测到。

2 个答案:

答案 0 :(得分:1)

使用左侧修剪和右侧修剪来移除两端的空格

select * from Persons where LTRIM(RTRIM(myval))='10442'

答案 1 :(得分:1)

最好的方法是限制带有空格的数据被添加到数据库表中。我希望您使用Oracle作为您的数据库,如果您尝试检索,带有空格的数据将会很奇怪。

解决方案:

    Insert into Persons values(rtrim(ltrim(myval)));

2)否则,如果你已经有这样的空白数据,我建议你在检索时添加修剪功能,以避免奇怪的输出。

我希望这可能对你有所帮助。

-Bruce