<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
`
正如我所提到的,这个位置一直在变化所以我不需要知道如何应对它
答案 0 :(得分:0)
使用
REPLACE(
iset.custom_f.value(
'(/ps/p[@pdid="67"]/@pv)[1]'
, 'varchar(80)'
)
,'[(null)]'
,''
) AS LeadSource
而不是你的案例陈述。你没有指定你正在使用的rdbms,所以我不知道你的引擎是否容忍索引超出范围的xpath表达式(如果没有p
元素有{{{},则会出现这种情况1}}具有值pdid
的atrribute。但是,用67
调用包装给定的sql表达式就足够了。