我真的不知道该怎么做,我对SQL有点新...我应该在我的情况下使用子字符串还是替换
我的数据库中有一封电子邮件,现在我想编辑所有以email.com结尾的电子邮件到email.org。我该怎么办?
答案 0 :(得分:32)
这取决于你需要做什么。您可以使用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()
将返回电子邮件值的开头,而不是最终.com
,然后将.org
连接到结尾。这可以防止在字符串中的其他位置替换.com
。
或者您可以使用stuff()
,它允许您同时删除和插入:
update yourtable
set email = stuff(email, len(email) - 3, 4, '.org')
where right(email, 4) = '.com';
这将删除最后一个字符前面第三个字符位置的4个字符(这是最终.com
的起始位置),然后插入.org
。
此方法也请参见SQL Fiddle with Demo。
答案 1 :(得分:4)
您可以使用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。
答案 2 :(得分:0)
要避免包含.com
john.comrad@email.com
到john.orgrad@email.org
的更新名称,您可以这样做:
UPDATE Yourtable
SET Email = LEFT(@Email, LEN(@Email) - 4) + REPLACE(RIGHT(@Email, 4), '.com', '.org')
答案 3 :(得分:-2)
尝试此查询,它将以.com
更改记录 UPDATE tablename SET email = replace(email, '.com', '.org') WHERE email LIKE '%.com';