2013-05-14 56 views
1
<ps> 
    <p pdid="47" pv="[email protected]" /> 
    <p pdid="49" pv="07827100000" /> 
    <p pdid="57" pv="dfdfdf Armstrong" /> 
    <p pdid="29" pv="[(null)]" /> 
    <p pdid="1" pv="[(null)]" /> 
    <p pdid="39" pv="[(null)]" /> 
    <p pdid="43" pv="[(null)]" /> 
    <p pdid="5" pv="[(null)]" /> 
    <p pdid="7" pv="[(null)]" /> 
    <p pdid="9" pv="[(null)]" /> 
    <p pdid="25" pv="[(null)]" /> 
    <p pdid="37" pv="[(null)]" /> 
    <p pdid="11" pv="[(null)]" /> 
    <p pdid="15" pv="[(null)]" /> 
    <p pdid="35" pv="[(null)]" /> 
    <p pdid="13" pv="[(null)]" /> 
    <p pdid="17" pv="[(null)]" /> 
    <p pdid="41" pv="[(null)]" /> 
    <p pdid="55" pv="[(null)]" /> 
    <p pdid="21" pv="[(null)]" /> 
    <p pdid="23" pv="[(null)]" /> 
    <p pdid="31" pv="[(null)]" /> 
    <p pdid="45" pv="[(null)]" /> 
    <p pdid="53" pv="[(null)]" /> 
    <p pdid="59" pv="[(null)]" /> 
    <p pdid="63" pv="[(null)]" /> 
    <p pdid="65" pv="[(null)]" /> 
    <p pdid="67" pv="LDC Data" /> 
    <p pdid="69" pv="[(null)]" /> 
    <p pdid="70" pv="[(null)]" /> 
    <p pdid="72" pv="12580672" /> 
    <p pdid="74" pv="CA1" /> 
</ps> 

以上數據以XML形式 - 這樣我怎麼能得到PV值,其中PDID =「67」 - 請記住PDID的XML位置不斷通過排排從改變。 如何剝離XML數據

我曾嘗試

`

Select 
    iset.NAME AS Region 
    ,iset.custom_f 
    ,CASE WHEN REPLACE(iset.custom_f.value('(/ps/p/pdid="67"/@pv)[30]', 'varchar(80)'),'[(null)]','') <> '' THEN 
      REPLACE(iset.custom_f.value('(/ps/p/pdid="67"/@pv)[30]', 'varchar(80)'),'[(null)]','') 
     WHEN REPLACE(iset.custom_f.value('(/ps/p/pdid="67"/@pv)[31]', 'varchar(80)'),'[(null)]','') <> '' THEN 
      REPLACE(iset.custom_f.value('(/ps/p/pdid="67"/@pv)[31]', 'varchar(80)'),'[(null)]','') 
     WHEN REPLACE(iset.custom_f.value('(/ps/p/pdid="67"/@pv)[28]', 'varchar(80)'),'[(null)]','') <> '' THEN     
      REPLACE(iset.custom_f.value('(/ps/p/pdid="67"/@pv)[28]', 'varchar(80)'),'[(null)]','') 
     WHEN REPLACE(iset.custom_f.value('(/ps/p/pdid="67"/@pv)[29]', 'varchar(80)'),'[(null)]','') <> '' THEN     
      REPLACE(iset.custom_f.value('(/ps/p/pdid="67"/@pv)[29]', 'varchar(80)'),'[(null)]','') 
    END AS LeadSource 
    ,iset.Source 
    ,ISET.oc_id 
    ,CASE WHEN ISNULL(ISET.app_id,'') <> '' THEN 1 ELSE 0 
    END app 
from 
intial_set iset 

`

正如我所提到的位置不斷變化的,所以我需要不知道如何應付它

+0

我已經提供了代碼 - 您的幫助真的很讚賞這個 – user2382166 2013-05-14 15:11:57

+0

當問這個問題時,請使用所有能夠幫助我們的標籤。您的問題目前缺少指定您正在使用的RDBMS的標記。謝謝。 – 2013-05-14 15:40:49

回答

0

使用

REPLACE(
     iset.custom_f.value(
      '(/ps/p[@pdid="67"]/@pv)[1]' 
      , 'varchar(80)' 
    ) 
    ,'[(null)]' 
    ,'' 
) AS LeadSource 

而不是你的病例陳述。你沒有指定你正在使用的rdbms,所以我不知道你的引擎是否容忍索引超出範圍的xpath表達式(如果沒有p元素具有值67pdid atrribute,則會發生這種情況) 。但是,使用COALESCE(..., '')調用來包裝給定的sql表達式就足夠了。

+0

@ collapsar.Thanks這適用於我.. – user2382166 2013-05-14 23:30:01