照合での ORDER BY
ソートは照合順で実行されます。既定では、文字列値の順序付けは、作成時に ORDER BY orderItem 列に対して指定された照合に基づいて行われます。InterSystems IRIS ネームスペースが SQLUPPER の既定の文字列照合を使用している場合、照合での ORDER BY では大文字と小文字を区別しません。
数値データ型フィールドの順序付けは、数値照合に基づいて行われます。式に対しては、既定照合は EXACT です。
照合関数を適用することで、列の既定照合をオーバーライドできます。例えば、ORDER BY %EXACT(Name) のように使用します。列のエイリアスに照合関数を適用することはできません。これを実行しようとすると、SQLCODE -29 エラーが生成されます。
既定の昇順照合シーケンスは、空文字列 ('') よりも NULL を最小値とします。ORDER BY は、空白スペースのみで構成される文字列と空文字列を区別しません。
列に指定された照合が英数字である場合、先頭の数字は、整数順ではなく、文字照合順でソートされます。整数順で並べるには、%PLUS 照合関数を使用できますが、この関数は数値以外の文字すべてを 0 として扱います。
混合数値文字列を数値順に正しくソートするには、複数の ORDER BY orderItem を指定する必要があります。次の形式の Home_Street 列について考えます。
Number StreetName StreetType
Number は、整数の番地です。StreetName と StreetType は、結合されて "Elm Street" などのような完全なストリート名を形成する文字列です。
以下の文では、住所を文字照合順にソートします。
SELECT Name,Home_Street FROM Sample.Person
ORDER BY Home_Street
以下の文では、番地を整数順でソートし、ストリート名を文字照合順でソートしています。この文には式が含まれ、列のエイリアスや列番号ではなく、列名のみを操作します。
SELECT Name,Home_Street FROM Sample.Person
ORDER BY $PIECE(%PLUS(Home_Street),' ',1),$PIECE(Home_Street,' ',2),$PIECE(Home_Street,' ',3)
ASC 照合と DESC 照合
列識別子の前の、オプションの ASC (昇順) や DESC (降順) キーワードで指定されたように、各列のソートは昇順または降順の照合順で指定できます。ASC や DESC が指定されていない場合、ORDER BY は列を昇順でソートします。ASC または DESC キーワードは、ダイナミック SQL の ? 入力パラメータや埋め込み SQL の :var ホスト変数を使用して指定することはできません。
NULL は常に、ASC 順では最も低い値であり、DESC 順では最も高い値となります。
複数のコンマ区切りの ORDER BY 値は、並べ替え操作の階層を指定します。例えば以下の文では、SELECT 節リスト内の 3 番目にリストされた項目 (C) のデータ値を昇順でソートします。この順序内で、7 番目にリストされた項目 (J) の値を降順でソートします。この中で、1 番目にリストされた項目 (A) の値を昇順でソートします。
SELECT A,B,C,M,E,X,J
FROM LetterTable
ORDER BY 3,7 DESC,1 ASC
ORDER BY 値のリスト内の重複した列は影響がありません。これは、2 番目のソートが最初のソート順序内であるためです。例えば、ORDER BY Name ASC, Name DESC では、Name 列を昇順でソートします。
NLS 照合
既定以外の NLS (各国言語サポート) 照合を指定した場合は、すべての照合が並べられており、同一の国固有照合順序を使用していることを確認する必要があります。これには、テーブルで使用されるグローバルのみならず、IRISTEMP やプロセス・プライベート・グローバルなどの、一時ファイルでインデックスに使用されるグローバルも含まれます。詳細は、"SQL 照合と NLS 照合" を参照してください。