使用CHARINDEX,Len和子串来定位从一列的某些信息(Using CharIndex, Len

2019-10-18 04:31发布

这里就是我想要做的,但惨遭失败:

我试图从一列,它是长期12000+字符检索地址。 幸运的是我,我可以找到通过XML标签的地址行1:

<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和仍然在学习和使用是错误的)。

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

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

谢谢!

Answer 1:

尝试这个 :

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

select @xml.value('(/PermanentAddress/AddressLine)[1]', 'nvarchar(100)')


Answer 2:

你发现开头: 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


文章来源: Using CharIndex, Len and Substring to locate certain information from a column