我有一个消息列,其中可以包含主机名信息-我需要替换和删除其中的一部分。
我为此编写的声明是:
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但未成功”
在一个单元中也可能有多个主机名实例,所有实例都必须转换。
发布于 2016-03-30 23:42:52
查找字符串'- RL'可能就足够了:
update table1
set message = replace(replace(message, '- RL', '- NN'), '.COMPANY.COM', '')
where message like '%- RL[0-9]%.COMPANY.COM%';第二种方法是简单地查找第一个匹配项并替换它。不幸的是,replace()没有只替换第一个函数的选项,但您可以用其他函数来修改它。如下所示:
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%';发布于 2016-03-31 07:20:39
这似乎是有效的,但你将不得不多次运行更新,因为它一次只更新'RL‘
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 endhttps://stackoverflow.com/questions/36313380
复制相似问题