2011-08-08 20 views
0

我在一个看起来像xml的sql表中有一个字段。我需要解析它以获得该领域。它看起来像:需要在SQL中解析字段,看起来像xml

<?xml version="1.0" encoding="utf-8"?> 
<Vendor> 
    <Vendor_ID><![CDATA[2 RIVERS CONTRA]]></Vendor_ID> 
    <Vendor_Name><![CDATA[2 RIVERS CONTRACTING & SERVICES, INC.]]></Vendor_Name> 
    <Vendor_Contact><![CDATA[]]></Vendor_Contact> 
    <Phone><![CDATA[0     ]]></Phone> 
    <Address><![CDATA[P.O. BOX 1512 ]]></Address> 
    <City><![CDATA[ARLINGTON]]></City> 
    <State><![CDATA[MA]]></State> 
    <Country><![CDATA[]]></Country> 
</Vendor> 

我需要拔出等领域的CDATA [2条河流魂斗罗

感谢提前的帮助。

+0

问题包含太少的具体内容。 –

+0

对不起,它没有第一次使用代码。谢谢 – user883288

+1

使用{}按钮可以制作更具可读性的代码...但是这个请求对我来说仍然没有意义。你究竟想要取决于什么标准? –

回答

1

它不仅看起来像XML它 XML。

如果表中的列是XML数据类型列,则可以获取像这样的值。

select XMLCol.value('(/Vendor/Vendor_ID)[1]', 'varchar(50)') as Vendor_ID 
from YourTable 

如果它是一个varchar/nvarchar列,您需要先转换为XML。

select cast(XMLCol as xml).value('(/Vendor/Vendor_ID)[1]', 'varchar(50)') as Vendor_ID 
from YourTable 

工作样本:

declare @YourTable table (XMLCol varchar(max)) 

insert into @YourTable values 
('<?xml version="1.0" encoding="utf-8"?> 
    <Vendor> 
    <Vendor_ID><![CDATA[2 RIVERS CONTRA]]></Vendor_ID> 
    <Vendor_Name><![CDATA[2 RIVERS CONTRACTING & SERVICES, INC.]]></Vendor_Name> 
    <Vendor_Contact><![CDATA[]]></Vendor_Contact> 
    <Phone><![CDATA[0     ]]></Phone> 
    <Address><![CDATA[P.O. BOX 1512 ]]></Address> 
    <City><![CDATA[ARLINGTON]]></City> 
    <State><![CDATA[MA]]></State> 
    <Country><![CDATA[]]></Country> 
    </Vendor>') 

select cast(XMLCol as xml).value('(/Vendor/Vendor_ID)[1]', 'varchar(50)') as Vendor_ID 
from @YourTable 

结果:

Vendor_ID 
---------------- 
2 RIVERS CONTRA