Oracle實現like多個值的查詢

來源:互聯網
上載者:User

標籤:sel   bsp   font   資訊   acl   說明   必須   oracl   callee   

問題背景描述:

某天客戶有一個需求,給定一批的手機號碼或者電話號碼,查詢出相關的通話記錄,以及相關的一些資訊。

客戶給定的被叫號碼:

 

查詢出來的結果如所示(本批次的結果不是匯入的結果查詢的,為了格式說明,因此匯入兩張結果不相關的圖片):

 

由於客戶給的被叫號碼很不規範,查詢的時候比較麻煩。

分析過程:

我建立了一個表security_phonebill_callee_num,用以存放匯入的被叫號碼資訊

所有的通話資料儲存在t_phonebill_201702中,想要查詢必須要實現like,就是以下sql的實現效果

select org_caller_num,org_callee_num,call_seconds,start_time,switch_id,
in_trunk,out_trunk,settle_carrier,file_name
from t_phonebill_201702 a
where a.org_callee_num like ‘%13800100186%‘

但是這樣的號碼有好多個,有時候有一百多個,以上的sql只能查詢一個號碼的通話記錄

一開始我想用遊標實現,寫一個遊標,把被叫號碼放入遊標中,然後寫一個迴圈,每次都依次查詢一下,

但後來發現t_phonebill_201702資料量太大,like一次就要花費時間20分鐘,100個就是2000分鐘(30個小時),耗時量太大,效率太低。

後來查閱資料,多次嘗試下寫下這個sql,總算是實現了查詢,實驗論證效率也還不錯。

select org_caller_num,a.org_callee_num,call_seconds,start_time,switch_id,
in_trunk,out_trunk,settle_carrier,file_name
from t_phonebill_201702 a
where exists
(select 1 from security_phonebill_callee_num c where a.org_callee_num
like ‘%||c.org_callee_num||%‘) ;

如果t_phonebill_201702表的資料量不大,可以考慮使用簡版,簡版更易於瞭解,也能更清楚明白like多個值是如何?的,但使用exists總是一個好習慣。如果你有類似的需求,希望可以幫到你。

select org_caller_num,a.org_callee_num,call_seconds,start_time,switch_id,
in_trunk,out_trunk,settle_carrier,file_name
from t_phonebill_201702 a,security_phonebill_callee_num c
where a.org_callee_num like ‘%||c.org_callee_num||%‘

 

Oracle實現like多個值的查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.