2013-05-28 48 views
1

查找特定信息下面是我想要做的,但慘遭失敗:使用CHARINDEX,Len和子字符串從列

我試圖從一列長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,仍然學習和使用它錯誤)。

此外,有多個標籤,但我只關心第一個標籤。

如果有人能幫助我,那將是非常棒的!

謝謝!

+1

是否將XML數據存儲爲'varchar'而不是'XML'類型? – praveen

+0

是的。我沒有看到使用它的重點是xml類型,因爲我只想要我的報告的一小部分信息。 – NonProgrammer

回答

4

試試這個:

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

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

+1。同意這個解決方案。 – Devart

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 
+0

謝謝!你幫了我很多時間! – NonProgrammer

相關問題