0

ベンダーデータベースに奇妙なデータがいくつかありますが、データベースの1つのフィールドから複数の異なるパラメーターを抽出できる必要があります。

したがって、この例から、( "%")の間にあるすべてのアイテムを引き出したいと思います。

引用符の間に文字列があり、コードのように見えることを無視してください。

"Func_GetParameterLatestValue(" IBW Patient Height RT Assess ")kHeight = Func_GetParameterLatestValue(" Height For IBW Vent Misc ")If(kSex)=" "Then
Return_Value = NULL Else If kHeight> 0 Then If kSex = 1 Then Return_Value = Round(( (kHeight-152.4)*。91)+50,0)Else
Return_Value = Round(((kHeight-152.4)*。91)+45.5,0)End IF Else Return_Value = NULL End IF End 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
4

1 に答える 1

2

これは、WITH ステートメントを使用して再帰的に行うことができます。ここでそれを見てみましょう。varchar(max) を FormulaDetails 列のデータ型に変更します。必要に応じて、このクエリは ScriptID を返し、見つかったチャンクの位置に番号を付けます (したがって、「IBW ベント その他の高さ」はオカレンス 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;
于 2012-04-28T02:35:40.323 に答える