【发布时间】:2012-08-24 15:52:47
【问题描述】:
我有一个 SQL Server 2008 db 列,我们将调用 XMLDoc,它包含以下格式的 XML:
<XMLDoc xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.xxx.xxx.xxx">
<Node>
<SubNode>
<SubSubNode>Value, Value, Value</SubSubNode>
<IrrelevantNode></IrrelevantNode>
</SubNode>
...
SubSubNode 包含 0 到 20+ 个值,以逗号分隔。单个值不应包含逗号,但它们的输入错误。例如,以下SubSubNode 是正确的:
<SubSubNode>Value, Value, Value</SubSubNode>
以下SubSubNode不正确:
<SubSubNode>Value, </SubSubNode>
我需要查找并用逗号替换单个值的所有实例以显示为:
<SubSubNode>Value</SubSubNode>
由于SQL不允许ends-with、starts-with或matches,我只能想出以下(这只是搜索值,我没有进行替换然而):
with xmlnamespaces(default 'http://schemas.xxx.xxx.xxx')
select [XMLDoc].value('(/XMLDoc/Node/SubNode/SubSubNode)[1]','varchar(2000)')
from XMLDoc
where [XMLDoc].exist('/XMLDoc/Node/SubNode[1] [contains(SubSubNode[1],", ")]')=1
显然,这会选择所有带逗号的值,而不仅仅是带逗号的单个值。
任何帮助都会很棒。
【问题讨论】:
标签: sql xml sql-server-2008