2016-03-30 13 views
0

私はホスト名情報を含むことができる[メッセージ]列を持っています。私はこれを行うために書いた別のパターンの後にSQL Serverの文字列インスタンスを置き換える方法はありますか?

声明は:

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は常にホスト名文字列の先頭になりますが、メッセージ列内の文字列全体の先頭にはなりません(おそらくそうではありません)。

例えば:

は、1つのセルに複数のホスト名のインスタンスがあるかもしれません

「ノー成功しRL12345.COMPANY.COMにアクセスしようとしました」、すべてのインスタンスがtansformedする必要があります。文字列 '- RL'探し

+0

でのみ「RL」を更新して、更新、複数の時間を実行する必要があります」キャラクター? –

+0

はい、RLは常にホスト名の最初の2文字であるため、常に最初の2文字になります。文字 – alexmc

+0

申し訳ありませんが、明確にするために - それは最初に先行します。文字ではなく、必ずしも文字列全体ではありません。 – alexmc

答えて

0

は十分かもしれない:

update table1 
    set message = replace(replace(message, '- RL', '- NN'), '.COMPANY.COM', '') 
    where message like '%- RL[0-9]%.COMPANY.COM%'; 

第2のアプローチは、単に最初の出現を探し、それを交換することです。残念ながら、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%'; 
+0

構文が間違っていない限り、ホスト名は通常 " - "で始まりません。 1つのセル内に複数のホスト名のインスタンスが存在することもあります。 – alexmc

+0

@alexmc。 。 。元のバージョンの質問は、 '' RL ''の前にハイフンがあるように見えました。 –

0

`これが動作しているようですが、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 end 
関連する問題