【问题标题】:Using CharIndex, Len and Substring to locate certain information from a column使用 CharIndex、Len 和 Substring 从列中定位某些信息
【发布时间】:2013-05-22 22:56:45
【问题描述】:

这就是我想要做的,但失败得很惨:

我正在尝试从长度超过 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 新手,还在学习和使用它错误)。

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

如果有人能帮助我,那就太棒了!

谢谢!

【问题讨论】:

  • 您是否将 XML 数据存储为 varchar 而不是 XML 类型?
  • 是的。我没有看到使用 xml 类型的意义,因为我只想要报告的一小部分信息。

标签: sql sql-server substring string-length


【解决方案1】:

试试这个:

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

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

【讨论】:

    【解决方案2】:

    你找到了开头:CHARINDEX('&lt;AddressLine&gt;', PC.css_record) + 21
    最后:CHARINDEX('&lt;/AddressLine&gt;', PC.css_record) - 3,
    现在您只需要通过从结尾减去开头来计算长度: CHARINDEX('&lt;/AddressLine&gt;', PC.css_record) - CHARINDEX('&lt;AddressLine&gt;', 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
    

    【讨论】:

    • 谢谢!你帮了我很大的忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    相关资源
    最近更新 更多