好的,我们有一个MS SQL Server数据库。数据库随着时间的推移而发展。我猜测某些字段曾是CHAR(<somenumber>)
,现在是VARCHAR
或NVARCHAR
。结果,一些数据最后有空格。
我们的应用程序提供了搜索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
。因此,上述查询无法提供所需/预期的结果。
我们有数千个这样的查询,因此修复不明确。
我的问题是:如何使我们的应用程序按预期工作?
答案 0 :(得分:7)
我会修复数据:
update Customers
set CustName = ltrim(rtrim(CustName));
如果“空格”不是简单空格,则可能需要更复杂的逻辑。
如果由于某种原因无法执行此操作,则可以添加新列:
alter customers add custname_cleaned as ( ltrim(rtrim(CustName)) );
但是,这需要更改所有查询。