1

我需要从文本字段中取回数据。输入并非都是漂亮的……有些用户拼写不好或不连贯。我需要寻找各种拼写错误以及替代术语。

我正在使用 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 吗?这对性能有帮助吗?

我正在搜索数千个文档,因此需要处理大量数据。

4

2 回答 2

2

是的,没有的%可以用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%')
于 2012-07-05T09:20:42.873 回答
0

您实际上可以将“like”表达式放入表达式中 - 表中的另一列或变量。

因此,您可以创建一个包含一个名为“like_expr”或类似名称的 varchar 列的表。

然后把上面所有的表达式都放进去,包括那些没有 % 的,因为它们只会退化为一个相等操作。

在效率方面,如果entry_txt被索引了,那么索引就可以使用了。我认为 Sybase 会发现加入 like_expr 表比做很多 OR 更容易,但两者都应该使用索引 - 这应该是一个单独的问题。)

创建表 abe (a varchar(20))

插入 abe 值('hello')

创建表 abe2 (l varchar(20))

插入 abe2 值('h%')

select * from abe a where exists (select 1 from abe2 where aa like l)

一种

你好

于 2012-07-19T15:11:33.220 回答