我是否需要涵盖where子句中的所有场景,还是有更好的方法?

时间:2016-12-06 16:09:41

标签: tsql sql-server-2012

我有列数据,我试图从搜索结果中过滤/省略,但数据与人为错误或没有特定标准不一致。我想要的结果是所有与绿色袜子不相似的数据。

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%'

2 个答案:

答案 0 :(得分:0)

您可以使用类似的查询结合大写或小写:

import pyspark.sql.functions.when,lit

newDF = df.withColumn("col10", when(df["col9"] < 0.5, lit("A")).otherwise(when(df["col9"] > 0.75, lit("C")).otherwise(lit("B"))

或者你可以使用soundex函数:

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

但是,由于soundex会产生不同的值,如果长度发生变化(例如,如果示例中提到的中间空间缺失或写入scocks而不是袜子,则可能需要添加一个范围:

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

答案 1 :(得分:0)

可以使用Levenshtein algorithm方法跟踪模型的人类差异。

请查看here以获取T-SQL实现:使用它,您可以创建一个存储过程并在WHERE子句中使用它,面对两个字符串(您的模型和列值),检查对于整数结果,表示您认为适合您的任务的距离