32

私は本当に何をすべきか正確にはわかりません。私はSQLに少し慣れていません。substring私の場合はorを使用する必要がreplaceありますか?

DB に「email」というフィールドがあり、「email.com」で終わるすべてのメールを「email.org」に編集したいと考えました。何をすればよいでしょうか?

4

4 に答える 4

49

それはあなたが何をする必要があるかによって異なります。replace値を置き換えたいので使用できます:

select replace(email, '.com', '.org')
from yourtable

次にUPDATE、新しいエンディングでテーブルに移動するには、次を使用します。

update yourtable
set email = replace(email, '.com', '.org')

電子メール値の最後の 4 文字を確認することで、これを拡張することもできます。

update yourtable
set email = replace(email, '.com', '.org')
where right(email, 4) = '.com'

ただし、問題は、メールの最後の場所だけでなく、他の場所にある可能性がreplace()あることです。.comしたがってsubstring()、次の方法を使用することをお勧めします。

update yourtable
set email = substring(email, 1, len(email) -4)+'.org'
where right(email, 4) = '.com';

デモで SQL Fiddle を参照してください

を使用substring()すると、最終値なしでメール値の開始が返され、最後.comに連結.orgされます。これにより、文字列内の他の場所の置換が防止.comされます。

またはstuff()、 を使用することもできます。これにより、削除と挿入の両方を同時に実行できます。

update yourtable
set email = stuff(email, len(email) - 3, 4, '.org')
where right(email, 4) = '.com';

これにより、最後の文字の前の 3 文字目の位置 (最後の の開始位置) の 4 文字が削除され、代わりに.com挿入されます。.org

この方法についても、SQL Fiddle with Demoを参照してください。

于 2013-02-04T11:55:45.767 に答える
8

あなたはただ使うことができますREPLACE

UPDATE myTable SET emailCol = REPLACE(emailCol, '.com', '.org')`.

ただし、次のような電子メール アドレスを考慮しjohn.comrad@some.company.comjohn.orgrad@some.organy.orgください。

より安全な側に置きたい場合は、 を使用して最後の 4 文字を確認し、代わりに手動で にRIGHT追加.orgする必要があります。末尾の大文字と小文字を区別しない検索を行うために をSUBSTRING使用していることに注意してください。UPPER.com

UPDATE myTable 
SET emailCol = SUBSTRING(emailCol, 1, LEN(emailCol)-4) + '.org'
WHERE UPPER(RIGHT(emailCol,4)) = '.COM';

このSQLFiddleで動作することを確認してください。

于 2013-02-04T11:59:07.053 に答える
0

.comlike john.comrad@email.comtoを含む更新名を回避するには、次のようにしjohn.orgrad@email.orgます。

UPDATE Yourtable
SET Email = LEFT(@Email, LEN(@Email) - 4) + REPLACE(RIGHT(@Email, 4), '.com', '.org')
于 2013-02-04T12:05:59.890 に答える
-2

このクエリを試してください。レコードが.comで終わるように変更されます

 UPDATE tablename SET email = replace(email, '.com', '.org') WHERE  email LIKE '%.com';
于 2013-02-04T12:00:05.510 に答える