我需要从文本字段中获取数据。输入并不都很漂亮......一些用户拼写不好或不一致。我需要寻找各种拼写错误以及替代术语。
我正在使用Sybase ASE,我想知道AND语句是否变得笨拙并且可能不是最佳的?这是一次尝试:
AND (entry_txt like 'fight' OR
entry_txt like 'confron%' OR
entry_txt like 'aggres%' OR
entry_txt like 'grab' OR
entry_txt like 'push' OR
entry_txt like 'strike' OR
entry_txt like 'hit' OR
entry_txt like 'assa%')
随着我对附加条款以及一些专有名称添加一些新要求以及其中8-9个更多变化,它会变得更长!有没有更有效的方法来做到这一点,或者是吗?
我还读过LIKE应该用于部分字符串比较,IN用于来自集合的值。一组部分字符串的值怎么样?我可以/我应该在这里使用IN并且这有助于提高性能吗?
我正在搜索数以千计的文档,因此需要处理大量数据。
答案 0 :(得分:1)
是的,对于那些没有%
的人,您可以使用IN
,对于其他人,您仍需要使用OR
。
它看起来像这样:
AND (entry_txt in ('fight', 'grab', 'push', 'strike', 'hit')
OR entry_txt like 'confron%'
OR entry_txt like 'aggres%'
OR entry_txt like 'assa%')
答案 1 :(得分:0)
你实际上可以把"喜欢"表达式中的表达式 - 表中的另一列或变量。
因此,您可以创建一个包含一个varchar列的表,名为" like_expr"或类似的东西。
然后将所有上述表达式放入其中,包括没有%in的表达式,因为它们只会退化为相等操作。
就效率而言,如果index_txt被索引,那么可以使用索引。我认为Sybase会更容易加入到like_expr表而不是做很多很多OR,但两者都应该使用索引 - 这应该是一个单独的问题。)
create table abe(varchar(20))
插入abe值(' hello')
创建表abe2(l varchar(20))
插入abe2值(' h%')
从abe a select *中选择*(从abe2中选择1,其中a.a喜欢l)
您好