2016-12-06 23 views
-1

我有列数据,我试图过滤/从我的搜索结果中省略,但数据是不一致的做人为错误或没有特定的标准。我希望的结果是所有与绿袜不相似的数据。我是否需要涵盖我的where子句中的所有场景,还是有更好的方法?

ID search_col 
--- ----------- 
1 Green Socks 
2 green Socks 
3 green socks 
4 Red Socks 
5 Greenscocks 
6 greenscocks 
7 blue socks 

在我的WHERE子句:

Where seacch_col Not like '%Green Socks%' 
    or search_col Not like '%green socks%' 
    or search_col Not like '%Green socks%' 
+1

不会'WHERE search_col ='红色袜子'会更好吗? – Lamak

+2

如果列是区分大小写的,您可以使用'LOWER(search_col)='red socks''或使用不区分大小写的排序规则 – Lamak

+0

是您的数据库在区分大小写的模式下运行吗?另外,我认为你正在寻找'和',而不是'或'。寻找***一件事情总是会比寻找***不是一件事情(更不是很多事情)更快。什么是绿色蔬菜?你的where子句并不考虑这种情况 – Kritner

回答

0

要么你可以使用一个类似的查询用大写或小写结合:

LOWER(search_col) LIKE '%red%socks%' 

,或者您可以使用同音功能:

soundex(search_col)= soundex('red socks')

然而,由于同音产生不同的值,如果长度的变化(例如,如果在中间的空间丢失或scocks写的,而不是在你的例子中提到的袜子,你可能希望顶部添加范围:

soundex(search_col) between soundex('red socks')-3 and soundex('red socks')+3 
+0

为什么+/- 3而不是另一个数字? –

+0

这是一个例子。 2或3应该多覆盖1或2个字符...... – Tyron78

0

与模型的人类差异可以用Levenshtein algorithm方法进行追踪。

请看看here为T-SQL实现:有了它,你可以创建一个存储过程,并在你的WHERE子句中使用它,面对两个字符串(你的模型和列值),检查一个整数结果这代表你将考虑为你的任务的距离

相关问题