ページのトップに戻る
Interstage Data Effector ユーザーズガイド

3.5.1 ソートする

対象のデータをソートします。

ここでは、以下の文書例を使用して説明します。

文書A

"name","namekana","date","train","taxi","hotel"
"田中愛子","たなかあいこ","2007年07月01日","7200円","1000円","8500円"

文書B

"name","namekana","date","train","taxi","hotel"
"鈴木一郎","すずきいちろう","2007年07月02日","14200円","1820円","7800円"

文書C

"name","namekana","date","train","taxi","hotel"
"鈴木太郎","すずきたろう","2007年07月03日",,"1200円","7800円"

文書D

"name","namekana","date","train","taxi","hotel"
"佐藤花子","さとうはなこ","2007年07月04日","5600円","2400円",

文書A

<doc>
  <name>田中愛子</name>
  <namekana>たなかあいこ</namekana>
  <detail>
    <date>2007年07月01日</date>
    <area>神奈川県横浜市港北区</area>
    <train>7200円</train>
    <taxi>1000円</taxi>
    <hotel>8500円</hotel>
  </detail>
</doc>

文書B

<doc>
  <name>鈴木一郎</name>
  <namekana>すずきいちろう</namekana>
  <detail>
    <date>2007年07月02日</date>
    <area>神奈川県横浜市港北区</area>
    <train>14200円</train>
    <taxi>1820円</taxi>
    <hotel>7800円</hotel>
  </detail>
</doc>

文書C

<doc>
  <name>鈴木太郎</name>
  <namekana>すずきたろう</namekana>
  <detail>
    <date>2007年07月02日</date>
    <area>神奈川県横浜市港北区</area>
    <train></train>
    <taxi>1200円</taxi>
    <hotel>7500円</hotel>
  </detail>
</doc>

文書D

<doc>
  <name>佐藤花子</name>
  <namekana>さとうはなこ</namekana>
  <detail>
    <date></date>
    <area>東京都千代田区</area>
    <train>5600円</train>
    <taxi>2400円</taxi>
    <hotel>ホテル代不要</hotel>
  </detail>
</doc>

3.5.1.1 文字列でソートする

対象データが持つ文字列でソートできます。文字列の大小関係は、文字列の文字コード値の大小関係です。文字列でソートする場合は、ソート式のキー指定にテキスト式、項目名またはsubstr関数を指定します。

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


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

ソート式
$namekana

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


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


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

ソート式
/doc/namekana/text() DESC

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


ポイント

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

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


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

ソート式
substr(/doc/detail/area/text(),0,10)

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


3.5.1.2 数値でソートする

対象データが持つ文字列を数値とみなしてソートできます。数値とみなしてソートするには、ソート式のキー指定に、val関数を指定します。val関数の引数には、テキスト式または項目名を指定します。

val関数の詳細については、“A.8.3 val関数”を参照してください。


タクシー代(taxi)の安い順(昇順)にソートします。

ソート式
val($taxi)

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


タクシー代(taxi)の高い順(降順)にソートします。

ソート式
val(/doc/detail/taxi/text()) DESC

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


ポイント

指定した文書中の文字列に数字を含まない場合は、val関数はその値を0とみなします。この例では、文書Dのホテル代は0として扱われています。
また、指定した文書中のデータがない場合は、その文書は最後に返却されます。


タクシー代(taxi)の高い順(降順)にソートします。

ソート式
val($taxi) DESC

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


3.5.1.3 複数のキー指定でソートする

対象データの複数の値をキーとしてソートできます。ソート式に“,”で区切って複数のキー指定を指定します。それぞれのキー指定は、数値でも文字列でもかまいません。キー指定は8個まで指定できます。


出張日(date)の順で、同じ出張日(date)である場合は宿泊費(hotel)が高い順(降順)となるようにソートします。

ソート式
/doc/detail/date/text(),val(/doc/detail/hotel/text()) DESC

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

ポイント

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