2013-02-20 98 views
-5

我一直在想出一些假想逻辑来弄清楚以下几点。如何快速找到匹配不同的字符串长度

我有一个表约十万条记录

的主键是ID,如

ID, col1, col2, col3 

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

现在我有用户输入诸如A3242XABC123Y32和... ...和

我的输出结果是找出表中的所有记录,其中 表中的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; 

- 基本循环直到找到值。

──为第二个方案中,我想我可以做somethign像

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

你为什么标记所有这些语言,当你的问题应该是SQL只? – 2013-02-20 20:29:01

+1

@Tim - 当然是关注的一声。 – Oded 2013-02-20 20:30:24

+0

什么sql服务器? – ysth 2013-02-20 20:35:51

回答

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

戈登,谢谢。我不确定我是否有能力将输入添加到表中并进行交叉连接,但这可能是一种可能性,但是,我需要尝试在解决方案之外解决此问题。喜欢Tim,我正在寻找逻辑,这实际上并不是特定于SQL,我的表可以作为散列或其他任何东西驻留在Java内存中,因此我正在寻找任何语言的逻辑,因此标记。在Perl或Python中可能对我最有效。 – user2092856 2013-02-20 21:52:22

相关问题