这是我想要做的事情,但却悲惨地失败了:
我正在尝试从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的新手而且还在学习并且使用它错了。)
此外,还有多个标签,但我只关注第一个标签。
如果有人可以帮助我,那将是非常棒的!
谢谢!
答案 0 :(得分:4)
试试这个:
declare @xml xml =
'<PermanentAddress>
<AddressLine><![CDATA[1234 1st street]]>
</AddressLine>
<City>test</City>
</PermanentAddress>'
select @xml.value('(/PermanentAddress/AddressLine)[1]', 'nvarchar(100)')
答案 1 :(得分: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