首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL Server中替换后跟另一个模式的字符串实例?

如何在SQL Server中替换后跟另一个模式的字符串实例?
EN

Stack Overflow用户
提问于 2016-03-30 23:31:40
回答 2查看 116关注 0票数 0

我有一个消息列,其中可以包含主机名信息-我需要替换和删除其中的一部分。

我为此编写的声明是:

代码语言:javascript
复制
update  table1
set     message = replace(replace(message ,'RL','NN'),'.COMPANY.COM','')
where   message is not NULL

因此,显示为RL12345.COMPANY.COM的主机名将作为NN12345返回。

问题是,如果“RL”出现在消息列中的任何其他位置,它将被错误地替换。有没有办法有条件地替换使用正则表达式?例如,我可以验证RL和.COMPANY.COM之间的数字字符数始终在7-9之间。

需要说明的是,尽管RL始终是主机名字符串的开头,但它可能不是(也可能不会)是message列中整个字符串的开头。

例如:

“尝试访问RL12345.COMPANY.COM但未成功”

在一个单元中也可能有多个主机名实例,所有实例都必须转换。

EN

回答 2

Stack Overflow用户

发布于 2016-03-30 23:42:52

查找字符串'- RL'可能就足够了:

代码语言:javascript
复制
update  table1
  set message = replace(replace(message, '- RL', '- NN'), '.COMPANY.COM',  '')
  where message like '%- RL[0-9]%.COMPANY.COM%';

第二种方法是简单地查找第一个匹配项并替换它。不幸的是,replace()没有只替换第一个函数的选项,但您可以用其他函数来修改它。如下所示:

代码语言:javascript
复制
update  table1
  set message = left(message, charindex('- RL', message)) + '- NN') +  
                substring(message, charindex('- RL', message) + 4,
                          charindex('.COMPANY.COM', message) - charindex('- RL', message) - 4
                         ) +
                right(message, len(message) - charindex('.COMPANY.COM') - 12)
  where message like '%- RL[0-9]%.COMPANY.COM%';
票数 0
EN

Stack Overflow用户

发布于 2016-03-31 07:20:39

这似乎是有效的,但你将不得不多次运行更新,因为它一次只更新'RL‘

代码语言:javascript
复制
 update  table1
 set message  = case when isnumeric( substring(message ,charindex('RL',message )+2,7)) = 1 then   left(message ,charindex('RL',message )-1) + 'MN' + substring(id,charindex('RL',message )+2,1000 ) else message  end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36313380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档