2017-04-24 11 views
-1

文字列内の2つの異なる特殊文字の間のテキストを削除したいと考えています。文字列はカンマ区切りのリストで、直後にサブ文字列を含む特殊文字が続く値が含まれます。文字と部分文字列はカンマで区切られたリストに1回、複数回、またはまったく表示されません。また、2つの文字の間の部分文字列は決して同じではありません。私は大/小記号とその2つの文字の間で何かを削除したいと思います。このデータベースに一時機能を作成する権限はありません。SQLカンマ区切りリスト内の異なる文字間の文字列を置換します

現在の結果:

PersonID  Loc  Code 
12345 LOC1 M25.532<1010771>, S52.572A<1010772>, S66.892A<1010773> 
12346 LOC2 M20.530<1010652>, S52.573A<1010752> 
12347 LOC3 M29.52<1045201> 

望ましい結果:SQL Serverの場合

PersonID  Location Code 
12345 LOC1  M25.532, S52.572A, S66.892A 
12346 LOC2  M20.530, S52.573A 
12347 LOC3  M29.52 
+1

を使用しているデータベースであなたの質問にタグを付けます。 –

+0

正規表現の仕事のような音です。正規表現のサポートは製品によって異なるので、使用しているデータベースを指定してください。 – lit

答えて

0

あなたが string_split()を使用することができ2016+ SQL Serverで

とSQL Server内の2017+ string_agg()(ただし、 string_split()は序数を返しません)。我々は<に分割し、使用して一緒に戻って文字列を連結されたサブクエリ内>に部分を削除するためにstuff()を使用することができジェフMODENでCSVスプリッタテーブル値関数を使用して、以前のSQL Server 2016へ

... select ... for xml path ('') method of string concatenation

select 
    t.PersonID 
    , t.Loc 
    , Code = (
     select stuff(s.Item,1,charindex('>',s.Item),'') 
     from [dbo].[delimitedsplit8K](t.Code,'<') s 
     where s.item<>'' 
     order by s.ItemNumber 
     for xml path (''), type).value('.','varchar(8000)') 
from t 

rextesterデモ:http://rextester.com/JONQ18668

リターン:

+----------+------+-----------------------------+ 
| PersonID | Loc |   Code    | 
+----------+------+-----------------------------+ 
| 12345 | LOC1 | M25.532, S52.572A, S66.892A | 
| 12346 | LOC2 | M20.530, S52.573A   | 
| 12347 | LOC3 | M29.52      | 
+----------+------+-----------------------------+ 

分割文字列は参照:

関連する問題