1

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

这是行不通的。仅返回前两个字符。

select 

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

from mytable

请帮忙

4

2 回答 2

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('/') 更改为父节点。

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

祝你好运。

于 2013-02-07T03:37:24.847 回答
0

根据Janosch Worschitz的说法,TSQL自 2005 年以来就支持 XQuery,所以不要substring在 XML 上做其他奇怪的事情,试试这个:

SELECT
    Page  = item.value'(//Page_no), INT)
FROM @XML.nodes('//root/Image') AS Facility(item);
于 2013-02-07T03:38:22.787 回答