2016-07-25 1 views
0

特定の条件でレコードを更新したいとします。レコードを更新中にsqlのreplace関数で文字列関数を使用することができます

例えば、私はAddressAddress1という列を持っています.Address1にはメールアドレスとアドレスが入っています。

サンプルデータ:

[email protected],Rourkela 
[email protected] 2nd street,7 hills  
2nd street, [email protected] 

私はResidenceAddress1からの電子メールをこのように発見しています:

select (concat(trim(substring_index(substring_index(Residence_Address1, '@', '1'), ' ', -1)),'','@gmail.com') as mail,Residence_Address1 
from mytable 
where Residence_Address1 like '%gmail%' and Email_Personal1="" 

私はこのようにそれを更新するとき:

update mytable 
set email_Personal1=concat(trim(substring_index(substring_index(Residence_Address1, '@', '1'), ' ', -1)), '','@gmail.com') , 
       Residence_Address1=replace(residence_address1,"'concat(trim(substring_index(substring_index(Residence_Address1, '@', '1'), ' ', -1)), '','@gmail.com')'",'') 
where Residence_Address1 like '%gmail%' and Email_Personal1="" 

をこのように、それが更新されますemail_personal1ではなく、その行のgmailのid値ではなく、emptyの値で置き換えられたresidence_address1を更新しませんでした。私はここで間違っていますか?

答えて

1

updateで複数の列と混合文字列関数を更新できます。この質問では、不要な二重引用符が余分にあります。

update fulldata_table 
    set email_Personal1 = concat(trim(substring_index(substring_index(Residence_Address1, '@', '1' 
             ), ' ', -1) 
     ), '', '@gmail.com'), 
     Residence_Address1 = replace(residence_address1, concat(trim(substring_index(substring_index(Residence_Address1, '@', '1'), ' ', -1)), '', '@gmail.com', '') 
    where Residence_Address1 like '%gmail%' and Email_Personal1 = '' 
+0

おかげおそらくあなたは、このような何かを意図しています。しかし、それは私に構文エラーを与える。 replace(fieldname、 'string1'、 'string2')であるreplace(fieldname、 '文字列を置き換える必要があります'、 'これで置き換え')です。次に、私はconcatで始まる全体の2番目の部分を一重引用符で囲む必要がありますか? –

+0

置き換えの2番目の部分で一重引用符を設定すると、非常に複雑に見えます。だから私は二重引用符を追加しました。 –

+1

@iks_in。 。 。そのように二重引用符を使用することはできません。 –

1

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

UPDATE fulldata_table SET 
    email_Personal1 = concat(trim(substring_index(substring_index(Residence_Address1, '@', '1'),' ',-1)), '@gmail.com') , 
    Residence_Address1 = replace(residence_address1, concat(trim(substring_index(substring_index(Residence_Address1, '@', '1'), ' ', -1)), '@gmail.com', ''), '') 
WHERE Residence_Address1 LIKE '%gmail%' AND Email_Personal1 = ''; 
+0

ありがとうございます。しかし、13,401行のうち12,388行が返されました。残りの1013行では機能しませんでした。 –

+0

これらはおそらくwhere句によって除外されます。 'select * from fulldata_tableどこにいなくても(Residence_Address1 LIKE '%gmail%' AND Email_Personal1 = '');' –

関連する問題