如何快速查找不同字符串长度的匹配项

时间:2013-02-20 20:27:47

标签: sql

我一直试图想出一些假的逻辑来弄清楚以下内容。

我有一张大约有十万条记录的表

主键是ID,例如

ID, col1, col2, col3

A3242X,,,
B323X,,,
A3242Y,,,
Y32YXX,,,

现在我有用户输入,例如A3242XABC123Y32以及......和...

我的输出是找出表格中的所有记录 表中的ID以任何输入值OR开头 任何输入值都以Id表中的任何值开头。

在这种情况下,输出将是

A3242X  (ID A3242XABC123 begins with this)     and 

Y32YXX  (the input Y32 begins with this).  

我的想法是我会循环输入值,比较然后从结尾减去一个字符....例如

search_var=A3242XABC123;

Loop

  select id from table where value = search_var;

  if found exit;

  search_var = substr(search_var, 0,length(search_var-1));

end;

- 基本上循环直到找到值。

- 对于第二种情况,我想我可以做一些像

这样的事情
search_var[1] = A3242XABC123;

search_var[2] = Y32YXX;

for i = 1 to 2 loop

select id from table where id begins search_var;

add id to result array;

end;

我正在寻找一种有效的方法来做到这一点。在大多数情况下,用户最多只能输入几十个ID。

1 个答案:

答案 0 :(得分:0)

忘记数组并将变量放入表中。然后你可以做类似的事情:

select *
from t cross join
     vars
     on t.id like concat(vars.val, '%') or
        vars.val like concat(t.id, '%')

在SQL Server中,您甚至可以执行以下操作:

with vars as (select 'var1' as val union all
              select 'var2' as val union all
              . . . 
             )
select *
from t cross join
     vars
     on t.id like vars.val + '%' or
        vars.val like t.id + '%'