2013-10-10 23 views
0

我有了與;分隔的電子郵件地址列的表:搜索每個令牌varchar列分裂用分隔符

TO            CC         BCC 
-------------------------------------------------------------------------------------------------------------------- 
[email protected];[email protected];[email protected] [email protected];[email protected] [email protected];[email protected] 

用戶提供了一個電子郵件地址作爲搜索條件,我必須查找對每個在這些列中查找任何colums具有目標電子郵件地址的行。

任何人都可以請幫我一下嗎?

我試過使用reg_exp,但沒有太多的經驗。

+1

請顯示您的嘗試。 – Jerry

+0

嘗試[INSTR](http://psoug.org/reference/substr_instr.html)而不是reg_exp。 –

回答

2

簡單的方法:

SELECT * FROM emailtable 
WHERE INSTR(';' || to || ';' || cc || ';' || bcc || ';' 
      ,';' || :search_parameter || ';') > 0; 
+0

您好傑弗裏,感謝您的輸入,我能夠得到輸出。但這裏有一點複雜。用戶可以選擇輸入作爲開始/包含/結束with.user可能沒有完整的電子郵件地址。我們可以使用%字符,我們可以修改查詢。 – user2865588

+0

在這種情況下,你需要解析列 - 請參閱http://stackoverflow.com/questions/4004377/splitting-comma-separated-string-in-a-pl-sql-stored-proc –

0

從您的要求,從我從傑弗裏·肯普的回答您的評論得到的,我建議你嘗試以下方法:

SELECT * 
    FROM emailtable 
WHERE lower(REPLACE ("TO" || ';' || cc || ';' || bcc, ' ', '')) 
     LIKE '%' || lower(REPLACE (:search_parameter, ' ', '')) || '%' 

lower功能可以幫助我們不區分大小寫的搜索。 REPLACE消除了空格。

我希望這應該給你一個線索。這是通過to,cc和bcc列搜索部分電子郵件ID的最簡單方法。請根據您的要求修改WHERE條件。

+0

嗨Rachcha,你的方法的問題是,如果列中包含分號和電子郵件之間的空間,它不起作用。 – user2865588

+0

什麼是您的搜索字符串?你能給我一些樣本搜索字符串嗎? – Rachcha

+0

嗨Rachcha,考慮列= cc = bcc =「[email protected]; [email protected]; [email protected]」如果用戶給出條目d.saus並且條件以 – user2865588