2015-04-06 145 views
-2

我有一個表格,其中每行都包含一個包含電子郵件地址字符串的列。我需要從地址字符串中提取每個地址。如何從電子郵件地址字符串中提取電子郵件地址

表例如:

id | email_id | 

123 | [email protected],[email protected];[email protected] | 

abc | [email protected];[email protected];[email protected] | 

900 | [email protected];[email protected];[email protected] | 

這是從表中進行選擇時預期的結果的一個例子:

id | email_id 

123 | [email protected] 

123 | [email protected] 

123 | [email protected] 

同樣的結果應當發生對ABC和900行。

請幫助我解決上述問題的SQL查詢。

+0

你已經有了什麼SQL? –

回答

0

我會在兩個不同的步驟中做到這一點。

先拔出每一行的第一個電子郵件地址,將其插回用相同的ID表:

insert into email_address(id, email_id) select id, left(email_id, locate(';', email_id) -1) from email_address where email_id like '%;%';

看起來就像這樣:

id email_address 

123 [email protected];[email protected];[email protected] 

900 [email protected];[email protected];[email protected] 

abc [email protected];[email protected];[email protected] 

123 [email protected] 

900 [email protected] 

abc [email protected] 

然後取出電子郵件您剛剛從原始字符串中彈出的地址:

update tester.email_address set email_id = substr(email_id, locate(';', email_id) +1) where email_id like '%;%';

看起來就像這樣:

id email_address 

123 [email protected];[email protected] 

900 [email protected];[email protected] 

abc [email protected];[email protected] 

123 [email protected] 

900 [email protected] 

abc [email protected] 

做同樣推動和彈出下一個電子郵件地址了,等等...

注意:您可能需要運行SET SQL_SAFE_UPDATES = 0;運行更新。

然後你可以運行類似於: select * from email_address order by email_id asc;來獲取值。

+0

感謝噸BK重新安排問題和答案,讓我試試這個選項,並回來這個。 我們無法按照預期在單次嘗試中獲得解決方案,而不是在兩個步驟中完成 – Shashi

+0

您無法在同一查詢中執行更新和插入操作......您的問題是必須彈出(插入)值的原始字符串,然後將更改推送(更新)到原始字符串...可能有另一種算法,別人知道......但是,我有一個類似的問題與數百萬的「鏈接」字符串,你有什麼這是我如何解決它... – BK435

+0

謝謝BK的幫助 – Shashi

相關問題