2013-02-20 92 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

相關問題