我真的不知道该怎么做,我对SQL还是个新手。在我的例子中我应该使用substring
还是replace
?
我在我的数据库中有一个名为“电子邮件”的字段,现在我想编辑所有以"email.com“结尾的电子邮件到"email.org”。怎么办?
发布于 2013-02-04 19:55:46
这取决于你需要做什么。您可以使用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';
使用substring()
将返回email值的开头,不带最终的.com
,然后将.org
连接到末尾。这可以防止替换字符串中其他位置的.com
。
或者,您可以使用stuff()
,它允许您同时执行删除和插入操作:
update yourtable
set email = stuff(email, len(email) - 3, 4, '.org')
where right(email, 4) = '.com';
这将删除最后一个字符(即最后一个.com
的起始位置)之前第三个字符的位置上的4个字符,并插入.org
。
有关此方法的信息,请参阅SQL Fiddle with Demo。
发布于 2013-02-04 19:59:07
你可以直接使用REPLACE
:
UPDATE myTable SET emailCol = REPLACE(emailCol, '.com', '.org')`.
但要考虑到,诸如john.comrad@some.company.com
之类的电子邮件地址将更新为john.orgrad@some.organy.org
。
如果您希望更安全,则应使用RIGHT
检查最后4个字符,并手动将.org
附加到SUBSTRING
。请注意,使用UPPER
使搜索.com
结束时不区分大小写。
UPDATE myTable
SET emailCol = SUBSTRING(emailCol, 1, LEN(emailCol)-4) + '.org'
WHERE UPPER(RIGHT(emailCol,4)) = '.COM';
看看它在这个SQLFiddle中的工作情况。
发布于 2013-02-04 20:06:00
要避免将包含john.comrad@email.com
等.com
的名称更新为john.orgrad@email.org
,您可以执行以下操作:
UPDATE Yourtable
SET Email = LEFT(@Email, LEN(@Email) - 4) + REPLACE(RIGHT(@Email, 4), '.com', '.org')
https://stackoverflow.com/questions/14686204
复制相似问题