是否有LIKE搜索的解决方案,其字段末尾有空格?

时间:2018-05-04 15:29:16

标签: sql sql-server

好的,我们有一个MS SQL Server数据库。数据库随着时间的推移而发展。我猜测某些字段曾是CHAR(<somenumber>),现在是VARCHARNVARCHAR。结果,一些数据最后有空格。

我们的应用程序提供了搜索Exact / EndsWith / BeginsWith / Contains选项的选项。生成的SQL如下所示:

Select * from Customers where CustName LIKE 'Concord Elementary School'
Select * from Customers where CustName LIKE '%Concord Elementary School'
Select * from Customers where CustName LIKE 'Concord Elementary School%'
Select * from Customers where CustName LIKE '%Concord Elementary School%'

然而,客户注意到Ends With和Contains搜索不起作用。 (他们最近使用支持Unicode的脚本更新了他们的数据库,将CHAR字段更改为NVARCHAR字段....)

据我所知,这些查询在&#34; Unicode更新&#34;之前有效。这改变了许多表的字段类型。

如果我针对数据库运行上述SQL,我会得到第三次和第四次查询的结果。但是,第一个和第二个查询什么都不返回。

所以,我去了现场,复制了数据,粘贴了它,并注意到该字段最后有空格 - 毫无疑问,该字段的结果曾经是CHAR。因此,上述查询无法提供所需/预期的结果。

我们有数千个这样的查询,因此修复不明确。

我的问题是:如何使我们的应用程序按预期工作?

1 个答案:

答案 0 :(得分:7)

我会修复数据:

update Customers
    set CustName = ltrim(rtrim(CustName));

如果“空格”不是简单空格,则可能需要更复杂的逻辑。

如果由于某种原因无法执行此操作,则可以添加新列:

alter customers add custname_cleaned as ( ltrim(rtrim(CustName)) );

但是,这需要更改所有查询。