如何替换sql字段值

use*_*512 20 sql sql-server-2008

我真的不知道该怎么做,我对SQL有点新...我应该在我的情况下使用substring或replace

我的数据库中有一封电子邮件,现在我想编辑所有以email.com结尾的电子邮件到email.org.我该怎么办?

Tar*_*ryn 33

这取决于你需要做什么.您可以使用,replace因为您要替换值:

select replace(email, '.com', '.org')
from yourtable
Run Code Online (Sandbox Code Playgroud)

然后UPDATE使用新的结尾到您的表,然后您将使用:

update yourtable
set email = replace(email, '.com', '.org')
Run Code Online (Sandbox Code Playgroud)

您还可以通过检查电子邮件值的最后4个字符来扩展此功能:

update yourtable
set email = replace(email, '.com', '.org')
where right(email, 4) = '.com'
Run Code Online (Sandbox Code Playgroud)

但是,问题replace()在于.com电子邮件中的其他位置可能不仅仅是最后一个.所以你可能想要使用substring()以下方式:

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

请参阅SQL Fiddle with Demo

使用substring()将返回电子邮件值的开头,而不是最终.com,然后将连接.org到最后.这可以防止替换.com字符串中的其他位置.

您也可以使用stuff(),它允许您同时删除和插入:

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

这将删除最后一个之前第三个字符位置的4个字符(这是最后一个的起始位置.com)并插入.org.

有关此方法,请参阅SQL Fiddle with Demo.


Xav*_*ica 8

你可以使用REPLACE

UPDATE myTable SET emailCol = REPLACE(emailCol, '.com', '.org')`.
Run Code Online (Sandbox Code Playgroud)

但请考虑john.comrad@some.company.com将更新为的电子邮件地址john.orgrad@some.organy.org

如果您想更安全一些,您应该使用RIGHT,检查最后 4 个字符,然后手动附加.orgSUBSTRING。注意UPPER使搜索.com结尾不区分大小写的用法。

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

看到它在这个SQLFiddle 中工作。