2016-12-14 39 views
0

我想要從列中獲取所有數據,但我的源只會給我一部分相同列上的信息,例如我的源將給我以下數據(未插入DB,excel文件):在條件下,使用substr

Id_Source 
---------------- 
ABC 
A1B 
B23 
CGT 
TGR 
FRT 

我的Oracle表信息如下:

Id 
---------------- 
ABC__120116 
A1B__130115 
B23__123534 
CGT__125347 
TGR__456873 
FRT__124652 

我試圖用一個SUBSTR函數來做到這一點,但它似乎沒有工作,這裏是我迄今爲止。

select id 
from Tbl1 
where 
id in (substr('ABC',1,3)); 

我也嘗試過使用OR條件工作,但我有成千上萬的記錄和搜索需要太長時間。

select id 
from tbl1 
where 
and (
transaction_id like 'ABC%' or 
transaction_id like 'A1B%' or 
transaction_id like 'B23%'); 

有沒有什麼辦法讓子條件的條件,或任何其他方式來使搜索更快?

+0

這些是2個不同的表?或者是其中的一個不在數據庫中? –

+0

Id_source不在數據庫上,它是一個excel文件 – Zombraz

+0

如果您可以將excel作爲表格導入數據庫,那麼這將是一個簡單的查詢。 –

回答

1

您是否正在尋找?

where substr(transaction_id, 1, 3) in ('ABC', 'A1B', 'B23', 'CGT', 'TGR', 'FRT') 

這可以與基於函數的索引工作得更快:

create index idx_t_transaction_id on t(substr(transaction_id, 1, 3)); 
+0

是的,它工作!謝謝! – Zombraz

+0

但發送結果仍然需要太長時間,並且列ID已編入索引。 – Zombraz