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>

これは機能していません。最初の2文字のみが返されます。

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)

そして、これがSQLFiddleです。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 に答える