我有2个表(2008 mssql数据库),可以说x.dbo
和y.dbo
x.dbo
的字段名称为"customer name"
,而y.dbo
的字段名称为"customers"
。一个表的数据由customers
输入,另一个表的数据由shipping company
输入,而我几个月来一直试图完成的工作是过滤所有匹配且部分匹配的customers
..(两个条件合在一起)
这是我的查询:
SELECT * FROM X JOIN Y ON
UPPER(X.CustomerName) LIKE '%' + UPPER(Y.Customers) + '%'
OR UPPER(Y.Customers) LIKE '%' + UPPER(X.CustomerName) + '%';`
上面的查询提供了大多数匹配的记录,但不是全部。
我不知道上面的代码为什么与下面的这两个名称不匹配:
İBRAHİM HAKKI KAZANCI <--> İBRAHIM HAKKI KAZANCI
这两个名称之间唯一的区别是一个写为"İBRAHİM"
,另一个写为"İBRAHIM"
(带有大写字母I),我需要将它们匹配,因为它们是相同的(而运输公司输入数据(基于我们的发票),有时他们会犯这样的小错误。)
注意:我的数据库的归类为Turkish_CI_AS
。
如果您能修复我的sql语句,使这两个名称也匹配,我会很高兴。
答案 0 :(得分:0)
这可能不是一个准确的解决方案,但可以为您服务。使用Soundex函数进行比较。
您需要的Soundex功能
select SOUNDEX('İBRAHİM HAKKI KAZANCI') , SOUNDEX('İBRAHIM HAKKI KAZANCI')
这将产生
(No column name) (No column name)
I165 I165
所以您可以使用类似的东西
SELECT * FROM X JOIN Y ON
SOUNDEX(X.CustomerName) = SOUNDEX(Y.Customers)
OR SOUNDEX(Y.Customers)=SOUNDEX(X.CustomerName)