これには簡単な解決策はありません。
最も適切な方法は、文字列分割関数を作成することです。サンプルデータから、値はすべて区切り記号なしで連結されているようです。つまり、考えられるすべての値のリストを作成し (できれば、これはいくつかの症状テーブルからのクエリです...)、文字列からそれぞれを解析する必要があります。これは複雑で苦痛になります。
これを行う簡単な方法は、各有効な症状値をテストして、それが に含まれているかどうかを確認HObservation.Value
し、見つかったすべての値をまとめて、結果を返すことです。これはパフォーマンスが非常に悪いことに注意してください。
TSQL での例を次に示します。ただし、アプリケーション層でこれを行うか、データベースを正規化する方がはるかに良いでしょう (詳細については以下を参照してください)。
declare @symptoms table (symptom varchar(100))
insert into @symptoms (symptom)
values ('Angina'),('Arrhythmia'),('CADC'),('Chest Pain')
declare @value varchar(100)
set @value = 'AnginaArrhythmiaCADCChest Pain'
declare @result varchar(100)
select @result = stuff((
SELECT ', ' + s.symptom
FROM @symptoms s
WHERE patindex('%' + s.symptom + '%',@value) > 0
FOR XML PATH('')),1,1,'')
select @result
本当の答えは、データベースを再構築することです。見つかった個別の各項目HObservation.Value
(狭心症、不整脈などを別の行として意味する) を別のテーブルに配置します (そのようなテーブルがまだ存在しない場合)。この表を症状と呼びます。HObservation
次に、 とリンクするルックアップ テーブルを作成しますSymptom
。次に、HObservation.Value
列を完全に削除します。アプリケーション レベルで分割作業を行い、ルックアップ テーブルに複数の挿入を行います。
質問のサンプルデータに基づく例:
HObservation
------------
ID Value
1 AnginaArrhythmiaCADC
なります:
HObservation
------------
ID
1
Symptom
-------
ID Value
1 Angina
2 Arrhythmia
3 CADC
HObservationSymptom
-------------------
ID HObservationID SymptomID
1 1 1
1 1 2
1 1 3
これが本番システムである場合 (または他の理由で既存のデータを保持したい場合) は、文字列分割を行うコードを記述する必要があることに注意してください。