-5

我一直在尝试想出一些伪逻辑来弄清楚以下内容。

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

主键是 ID,例如

ID, col1, col2, col3

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

现在我有用户输入,例如 A3242XABC123and Y32and ... and ...

我的输出是找出表中的所有记录,其中表中的 ID 以任何输入值开头,或者任何输入值以 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。

4

1 回答 1

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 + '%'
于 2013-02-20T20:47:34.260 回答