2016-07-27 8 views
0

私のMySQLテーブルでは、私は列に「Residence_Address1」と書かれています。しかし、他の列の値もあります。フィールドから電子メールIDを抽出したいと思います。mysqlに複数の単語を含むフィールドからメールを抽出します。

サンプルデータ。

例えば、

[email protected],[email protected],cityname 
cityname,zipcode,[email protected] 
[email protected],cityname,[email protected] 
apartment,streetname,cityname,[email protected],[email protected] 

私はこの方法を試してみました場合は:。

select 
concat(trim(substring_index(substring_index(ResidenceAddress1, '@', '1'), ' ', -1)), '@gmail.com') as mail 
,ResidenceAddress1 
from mytable 

1)それはこのようにデータをマージします。出力:代わり[email protected]

2の [email protected]
)はaddress.Outputと共に電子メールをフェッチ:行からapartment,streetname,cityname,[email protected] 代わりの[email protected]

私はこのようにしました。

select concat(substring_index((substring_index(Residence_Address1, '@', 2)),'@gmail',1),'@gmail.com') as mail, residence_address1 
from mytable 
where Residence_Address1!="" and Residence_Address1 like '%gmail%' 

1)yahoo idのようなレコードをgmail idとマージしませんでした。

2)しかし、それは電子メールIDと共に完全なアドレスを与える。

eg.streetname、cityname、gmailid。

上記の試みは、主にgmail idsを取得していました.gmail idだけを取得する代わりに、すべてのメールを1行から抽出します。メールのみ。

答えて

2

これを試してみてください:

SELECT 
    CONCAT(
     TRIM(
      SUBSTRING_INDEX(
       SUBSTRING_INDEX(
        SUBSTRING_INDEX(ResidenceAddress1, '@gmail', '1') 
       , ' ', -1) 
      , ',', -1) 
     ) 
     , '@gmail.com') AS mail 
    ,ResidenceAddress1 
FROM mytable 

スキーマ:

CREATE TABLE mytable 
    (`ResidenceAddress1` varchar(58)) 
; 

INSERT INTO mytable 
    (`ResidenceAddress1`) 
VALUES 
    ('[email protected],[email protected],cityname'), 
    ('cityname,zipcode,[email protected]'), 
    ('[email protected],cityname,[email protected]'), 
    ('apartment,streetname,cityname,[email protected],[email protected]') 
; 

結果:

| mail   | ResidenceAddress1           | 
+----------------+------------------------------------------------------------+ 
| [email protected] | [email protected],[email protected],cityname     | 
| [email protected] | cityname,zipcode,[email protected]       | 
| [email protected] | [email protected],cityname,[email protected]    | 
| [email protected] | apartment,streetname,cityname,[email protected],[email protected] | 

編集:

SELECT 
    CONCAT(
     TRIM(
      SUBSTRING_INDEX(
       SUBSTRING_INDEX(
        SUBSTRING_INDEX(
         IF(LOCATE('@yahoo', ResidenceAddress1), ResidenceAddress1, ''), 
         '@yahoo', 1) 
       , ' ', -1) 
      , ',', -1) 
     ) 
     , IF(LOCATE('@yahoo', ResidenceAddress1), '@yahoo', '') 
     , SUBSTRING_INDEX(SUBSTRING_INDEX(IF(LOCATE('@yahoo', ResidenceAddress1), ResidenceAddress1, ''), '@yahoo', -1), ',', 1) 
    ) AS mail 
    ,ResidenceAddress1 
FROM mytable 

Demo

+0

ありがとうございます。私の間違いを知った。 –

+0

ああ、ヤフーIDはatyahoo.comやatyahoo.co.inのようにレコードからヤフーIDを抽出すると機能しません。ここでは、.comまたは.co.inの場合でも、.comにすべてのIDを付加しています。 –

+0

@iks_in私は自分の答えを更新しました。それを確認してください。 – Blank

関連する問題