1

这是我正在尝试做的,但失败得很惨:

我正在尝试从 12000 多个字符长的列中检索地址。幸运的是,我可以通过 XML 标签找到地址 line1:

<PermanentAddress> <AddressLine><![CDATA[1234 1st street]]></AddressLine> <City>

这是我到目前为止所做的:

select 
substring(PC.css_record, CHARINDEX('<AddressLine>', PC.css_record)+ 21, CHARINDEX('</AddressLine>', PC.css_record))
from 
table1

我也尝试在那里挤压长度函数来计算我的子字符串函数的长度末端,但这只是给了我一个错误(可能是因为我是 SQL 新手,还在学习和使用它错误)。

此外,有多个标签,但我只关心第一个。

如果有人可以帮助我,那将是非常棒的!

谢谢!

4

2 回答 2

5

尝试这个 :

declare @xml xml = 
'<PermanentAddress> 
<AddressLine><![CDATA[1234 1st street]]>
</AddressLine> 
<City>test</City>
</PermanentAddress>'  

select @xml.value('(/PermanentAddress/AddressLine)[1]', 'nvarchar(100)')
于 2013-05-28T06:48:41.977 回答
3

您找到了开头:CHARINDEX('<AddressLine>', PC.css_record) + 21
和结尾:CHARINDEX('</AddressLine>', PC.css_record) - 3
现在您只需要通过从结尾减去开头来计算长度: CHARINDEX('</AddressLine>', PC.css_record) - CHARINDEX('<AddressLine>', PC.css_record) - 24

select 
    substring(PC.css_record,
              CHARINDEX('<AddressLine>', PC.css_record) + 21,
              CHARINDEX('</AddressLine>', PC.css_record)
                  - CHARINDEX('<AddressLine>', PC.css_record) - 24)
from 
PC
于 2013-05-28T05:08:14.190 回答