使用CharIndex,Len和Substring从列中查找某些信息

时间:2013-05-28 04:55:44

标签: sql sql-server substring string-length

这是我想要做的事情,但却悲惨地失败了:

我正在尝试从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的新手而且还在学习并且使用它错了。)

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

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

谢谢!

2 个答案:

答案 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