我在供应商数据库中有一些奇怪的数据,但需要能够从数据库中的一个字段中提取多个不同的参数。
所以从这个例子中我想拉出所有介于两者之间的项目(“%”)
引号之间是一个字符串,不管它看起来像代码:
“Func_GetParameterLatestValue(”IBW Patient Height RT Assess“)kHeight = Func_GetParameterLatestValue(”IBW Vent Misc的高度“)If(kSex)=”“然后
Return_Value = NULL否则如果kHeight> 0然后如果kSex = 1那么Return_Value = Round(((kHeight - 152.4)* .91)+50,0)否则
Return_Value = Round(((kHeight - 152.4)* .91)+45.5,0)结束IF Else Return_Value = NULL结束IF结束IF'Return_Value = kHeight'(“IBW患者身高RT评估”)“
所以返回值为:
IBW Patient Height RT Assess,
Height For IBW Vent Misc,
IBW Patient Height RT Assess
我愿意接受任何建议尝试使这项工作。理想情况下,我希望能够在子查询中查看结果,以确保它们存在于另一个表中。
此查询当前返回第一个实例
select vbs.Name,
SUBSTRING(sd.FormulaDetails,
CHARINDEX('("', sd.FormulaDetails)+2,(CHARINDEX('")',sd.FormulaDetails) - CHARINDEX('("', sd.FormulaDetails))-2)
from StatementDefinitions sd, MvVBScript vbs
where sd.ScriptID = vbs.ID
答案 0 :(得分:2)
您可以使用WITH语句递归执行此操作。这是一个镜头。将varchar(max)更改为FormulaDetails列的数据类型。如果你想要它,这个查询返回ScriptID并对它找到的块的位置进行编号(因此'IBW Vent Misc的高度'将出现2)
with Chunks(id,occurrence,position,token,remainder) as (
select
ScriptID,
cast(0 as int),
charindex(@token,FormulaDetails),
cast('' as varchar(max)),
substring(c,charindex(@token,FormulaDetails)+1,len(FormulaDetails))
from StatementDefinitions
where FormulaDetails like '%'+@token+'%'
union all
select
id,
occurrence+1,
charindex(@token,remainder)+position,
cast(substring(remainder,1,charindex(@token,remainder)-1) as varchar(max)),
substring(remainder,charindex(@token,remainder)+1,len(remainder))
from Chunks
where remainder like '%'+@token+'%'
)
select id, occurrence, token from Chunks
where occurrence > 0
order by id;