对此没有简单的解决方案。
最方便的方法是编写一个字符串拆分函数。从您的示例数据来看,这些值似乎都连接在一起而没有任何分隔符。这意味着您必须提出所有可能值的列表(希望这是来自某些症状表的查询......)并从字符串中解析出每个值。这将是复杂而痛苦的。
一种直接的方法是测试每个有效的症状值以查看它是否包含在 中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
请注意,如果这是一个生产系统(或者您出于其他原因想要保留现有数据),您仍然需要编写代码来进行字符串拆分。