使用字符串方法从文本SQL中提取页码

时间:2013-02-07 03:29:44

标签: sql sql-server tsql

我想提取<Page_No>10</Page_No>之间的页码,即检索10。

文字就像

 <root>
  <Image>
    <File_image>07Feb13Kol030.jpg</File_image>
    <Page_no>10</Page_no>
    <Logo>N</Logo>
    <Photo>N</Photo>
    <Color>B</Color>
  </Image>
</root>

这不起作用。只返回FIRST两个字符。

select 

substring(convert(varchar(max),fileimage),charindex(convert(varchar(max),fileimage),'Page_no')+8,2) 

from mytable

请帮忙

2 个答案:

答案 0 :(得分:1)

尝试使用CROSS APPLY - 这是模型帮助:

SELECT 
   x.value('(Page_no)[1]', 'int') AS 'Page_no'
FROM XMLTable x
CROSS APPLY x.myXMLField.nodes('/root/Image') 
  n(x)

这是SQL Fiddle。根据XML的完整结构,您可能需要将.nodes('/')更改为父节点。

如果有帮助,我已更新我的答案以包含您的字段名称。

祝你好运。

答案 1 :(得分:0)

根据Janosch Worschitz,TSQL已经XQuery support since 2005,因此不要在XML上执行substring和其他奇怪的事情,请尝试以下方法:

SELECT
    Page  = item.value'(//Page_no), INT)
FROM @XML.nodes('//root/Image') AS Facility(item);