1
<ps>
    <p pdid="47" pv="x@xx.net" />
    <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 格式的——所以我怎样才能得到 PDID =“67”的 PV 值——请记住 PDID 的 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

`

正如我提到的立场不断变化,所以我需要不知道如何应对

4

1 回答 1

0

利用

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

而不是你的案例陈述。您没有指定您正在使用的 rdbms,所以我不知道您的引擎是否允许索引超出范围的 xpath 表达式(如果没有具有value 属性的p元素会发生这种情况)。但是,用调用包装给定的 sql 表达式就足够了。pdid67COALESCE(..., '')

于 2013-05-14T17:27:18.860 回答