2012-04-27 13 views
0

ベンダーデータベースに奇妙なデータがありますが、dbの1つのフィールドから複数の異なるパラメータを抽出できる必要があります。引用符の間文字列内の部分文字列のすべての結果を返す

したがって、この例から、私は(「%」)の間に入るすべての項目を引き出したい

それは、コードのように見えることを、文字列、無視です:

『Func_GetParameterLatestValue(』 IBW (kSex)= ""ならば
Return_Value = NULL Else If kHeight> 0 then kSex = 1ならばReturn_Value = Round(((kHeight - RT))は、 152.4)*。91)+50,0)Else
Return_Value = Round(((kHeight - 152.4)* .91)+45.5,0)End IF Else Return_Value = NULL End I Fエンド「RETURN_VALUE = kHeight」IF( 『IBW患者の身長RTは評価』)」

ので、戻り値は次のようになります。

IBW Patient Height RT Assess, 
Height For IBW Vent Misc, 
IBW Patient Height RT Assess 

イムこの仕事をしようとして作るためにどんな提案を開いて。理想的には、サブクエリで結果をスムーズにして別のテーブルに存在することを確認したいと思っています。

このクエリは、現在、あなたはWITH文で再帰的にこれを行うことができ、最初のインスタンスに

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

見つけたチャンクの位置を返します。いくつかのクエリで列の結果を部分文字列にする方法を尋ねていますか?上記のコードはT-SQLのように見えません。 – Tejs

+0

申し訳ありませんが、コードのように見えるという意味ではありませんでした。文字列の実際の部分だけです... – cjparker

+0

私はSQLの人よりも.NETの方が多いので...私はCLR-UDF –

答えて

2

を返します。ここにそれを撃った。 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 '%'[email protected]+'%' 
    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 '%'[email protected]+'%' 
) 
    select id, occurrence, token from Chunks 
    where occurrence > 0 
    order by id; 
+0

ねえ、スティーブ、これはありがとう。最初の部分文字列で 'C'とは何ですか? – cjparker

+0

cはFormulaDetailsでなければなりません、私はかなり確信しています。 –

+0

thats私は思ったものの、0の結果を得ています。( – cjparker

関連する問題