如何在特定字符之前替换字符串的子字符串?

Posted

技术标签:

【中文标题】如何在特定字符之前替换字符串的子字符串?【英文标题】:How do I replace a substring of a string before a specific character? 【发布时间】:2012-09-04 12:01:23 【问题描述】:

Email:

价值观:

josh@yahoo.com
carmine32@hotmail.com
zehmaneh@yahoo.com

我想用test替换@之前的字符串。

结果:

test@yahoo.com
test@hotmail.com
test@yahoo.com

如何根据字符串中的字符使用子串和替换?

【问题讨论】:

你使用任何服务器端语言吗? 【参考方案1】:

你甚至不需要使用substringreplace,你可以使用这个:

SELECT 'test' + RIGHT(email, charindex('@', REVERSE(email)))
FROM YourTable

你可以用这个来测试它:

DECLARE @email nvarchar(50)
SET @email = 'carmine32@hotmail.com'
PRINT 'test' + RIGHT(@email, charindex('@', REVERSE(@email)))

【讨论】:

@Testifier 你试过所有的解决方案了吗? REVERSE 是 TSQL 中性能较低的字符串函数之一。 我将它与 LEFT 一起使用以删除字符串末尾的任何尾随空格。它工作得很好。甚至像“this”这样的字符串也会返回“this”。感谢您的解决方案。【参考方案2】:
declare @t table(email varchar(30))
insert @t values('josh@yahoo.com'),
                ('carmine32@hotmail.com'),
                ('zehmaneh@yahoo.com') 

select stuff(email, 1, charindex('@', email), 'Test@') 
from @t

结果:

Test@yahoo.com
Test@hotmail.com
Test@yahoo.com

【讨论】:

【参考方案3】:

您可以使用SUBSTRINGCHARINDEX

UPDATE Email set email = 
    'test' + SUBSTRING(email, CHARINDEX('@',email), LEN(email))

小提琴:http://sqlfiddle.com/#!3/0face/6/0

【讨论】:

【参考方案4】:

你可以

select 'test' + substring(fld, charindex('@', fld), len(fld))

【讨论】:

以上是关于如何在特定字符之前替换字符串的子字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在JAVA中用不同的子字符串替换字符串的子字符串?

如何替换整个数据库中的字符串(数据值)?

如何在 Netezza 中替换完整的子字符串

如何计算最小编号。将字符串转换为回文的替换?

如何替换字符串的子字符串[重复]

如何替换mongodb文档中的子字符串