文書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> |
対象データが持つ文字列でソートできます。文字列の大小関係は、文字列の文字コード値の大小関係です。文字列でソートする場合は、ソート式のキー指定にテキスト式、項目名または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文字をソートキーとして利用します。
対象データが持つ文字列を数値とみなしてソートできます。数値とみなしてソートするには、ソート式のキー指定に、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の順に返却されます。
対象データの複数の値をキーとしてソートできます。ソート式に“,”で区切って複数のキー指定を指定します。それぞれのキー指定は、数値でも文字列でもかまいません。キー指定は8個まで指定できます。
例
出張日(date)の順で、同じ出張日(date)である場合は宿泊費(hotel)が高い順(降順)となるようにソートします。
ソート式 | /doc/detail/date/text(),val(/doc/detail/hotel/text()) DESC |
結果:文書A、B、C、Dの順に返却されます。
ポイント
データ中にソート式で指定したデータがない場合は、“DESC”の指定の有無にかかわらず、その文書は最後に返却されます。上記のXML例の文書Dは、出張日(date)の早い順でも遅い順でも最後に返却されます。