ページの先頭行へ戻る
Big Data Integration ServerV1.4.0 検索編アプリケーション開発ガイド
FUJITSU Software

3.5.1 文字列でソートする

XML文書中の任意の要素ノードまたはその要素ノードの属性ノードが持つ文字列でソートすることができます。文字列の大小関係は、文字列の文字コード値の大小関係です。文字列でソートする場合は、ソート式のキー指定にテキスト式、属性式または単一行関数指定のrlen関数を指定します。

キー指定の詳細については、“B.5.1 ソート式の書式”を参照してください。


例として以下の文書があるものとします。


文書A

<doc>
    :
  <namekana>たなかあいこ</namekana>
    :
  <basic date="2006年01月22日">
    :
  </basic>
  <detail>
    :
    <destination area="東京都千代田区八重洲">東京営業所</destination>
    :
  </detail>
    :
</doc>

文書B

<doc>
    :
  <namekana>すずきいちろう</namekana>
    :
  <basic date="2006年02月03日">
    :
  </basic>
  <detail>
    :
    <destination area="大阪府大阪市阿倍野区阿倍野元町">大阪支店</destination>
    :
  </detail>
    :
</doc>

文書C

<doc>
    :
  <namekana>すずきたろう</namekana>
    :
  <basic date="2006年01月13日">
    :
  </basic>
  <detail>
    :
    <destination area="北海道札幌市中央区">北海道支店</destination>
    :
  </detail>
    :
</doc>

文書D

<doc>
    :
  <namekana>さとうはなこ</namekana>
    :
  <basic date="">
    :
  </basic>
  <detail>
    :
    <destination area="愛知県名古屋市千種区覚王山">愛知支店</destination>
    :
  </detail>
    :
</doc>

例1

氏名ひらがな(namekana)を昇順にソートします。

/doc/namekana/text()

結果:文書D、B、C、Aの順に返却されます。


例2

出張日(date)の早い順(昇順)にソートします。

/doc/basic/@date

結果:文書C、A、B、Dの順に返却されます。


文字コードの大きい順(降順)にソートしたい場合は、キー指定のあとに“DESC”を指定します。

例3

氏名ひらがな(namekana)を降順にソートします。

/doc/namekana/text() DESC

結果:文書A、C、B、Dの順に返却されます。


例4

出張日(date)の遅い順(降順)にソートします。

/doc/basic/@date DESC

結果:文書B、A、C、Dの順に返却されます。


参考

XML文書中にテキスト式で指定したテキストノードがない場合は、“DESC”の指定の有無にかかわらず、そのXML文書は最後に返却されます。上記の例では、文書Dは、出張日の早い順でも遅い順でも最後に返却されます。

ポイント

文字列でソートする場合、文字列の先頭20バイトをキーにしてソートを実施します。このため、指定したキー指定の文字列の長さが20バイトよりも大きい場合、XML文書は20バイト目以降の文字で正しくソートされません。このような場合は、キー指定にrlen関数を指定して、先頭から何文字をソートキーとするかを指定できます。

rlen関数の詳細については、“B.2.4 単一行関数指定”を参照してください。


例5

出張先(destination)でソートしたい場合

rlen(/doc/detail/destination/text(),10)

上記のように指定すると、出張先の先頭から10文字をソートキーとして利用します。


例6

出張エリア(area)でソートしたい場合

rlen(/doc/detail/destination/@area,30)

上記のように指定すると、出張エリアの先頭から30文字をソートキーとして利用します。