• 検索結果がありません。

照合

ドキュメント内 Caché SQL の使用法 (ページ 34-39)

照合は、SQL 内で値を並べる方法を指定します。照合は、照合関数 (値を照合値に変換する組み 込みの関数) によって指定されます。例えば、SQLUPPER 照合 (大文字と小文字を区別しない照 合) は、文字列をすべて大文字に変換します (注意: SQLUPPER 変換は SQL の UPPER 関数の 結果とは異なります)。

Caché は以下の照合関数を提供しています。

主な照合関数 説明

照合関数

末尾のスペースや大文字と小文字の区別も含め、厳密に値を並 べます。数値で始まる文字列値がある文字列データ (例えば '123'、'123abc'、または '-123abc') に対しては、使用しないでくだ さい。

EXACT

大文字と小文字を区別した文字列順に、値を並べます。値を文 字列に変換し、後続の空白 (スペースやタブなど) を削除し、文 字列の最初の部分に空白を 1 つ追加します。空白 (スペース、

タブなど) だけを含む値を SQL 空文字列として照合します。

SQLSTRING

SQLSTRING と同様ですが、文字列を最初の n 文字に切り捨て ます。n には正の整数を指定します。この照合を使用して、長い 文字列のインデックスと並び替えを向上させます。

SQLSTRING(n)

大文字と小文字を区別しない文字列順に、値を並べます。値を 文字列に変換し、後続の空白 (スペースやタブなど) を削除し、

文字列の最初の部分に空白を 1 つ追加します。空白 (スペース、

タブなど) だけを含む値を SQL 空文字列として照合します。

SQLUPPER

SQLUPPER と同様ですが、文字列を最初の n 文字に切り捨て ます。n には正の整数を指定します。この照合を使用して、長い 文字列のインデックスと並び替えを向上させます。

SQLUPPER(n)

SQL は、以下の演算時にフィールドの照合値を使用します。

• ORDER BY 節でフィールドを使用する場合

• フィールドに SQL 比較演算子 (=、>、<、BETWEEN など) を使用している場合

• フィールドで %STARTSWITH 演算を使用している場合

• フィールドで MIN、MAX、DISTINCT、GROUP BY 演算を使用している場合。UNION は DIS-TINCT 演算も含みます。

注釈: LIKE 比較演算子は、照合を使用しません。

フィールドの照合は、以下のように定義されます。

1. フィールドに使用されるデータ型は、既定の照合を指定します。文字列データ型 (%Stringなど) の既定は、SQLUPPER です。現在提供されている照合関数は、文字列以外のデータ型では、

あまり便利ではありません。

照合

2. 特定のプロパティ (フィールド) 定義は、COLLATION パラメータ値を与えることにより、照合の 既定をオーバーライドできます。例えば、以下のクラスのNameプロパティは、EXACT 照合で す。

Class MyApp.Patient Extends %Persistent [ClassType = persistent]

{

/// Patient name

Property Name As %String(COLLATION = "Exact");

/// ...

}

通常のアプリケーションでは、システムの照合の既定値は正しいので変更を加える必要はありませ ん。

注釈: 既にデータが保存されているクラスのプロパティに対する照合を変更すると、プロパティの インデックスが無効になります。変更の必要がある場合は、このプロパティに基づいたイン デックスを再構築する必要があります。

3.5.1 インデックス値の照合

既定では、任意のプロパティのインデックスは、プロパティ・データの照合形式を使用します。例え ば、%StringタイプのNameプロパティを定義したとします。

Class MyApp.Person Extends %Persistent [ClassType = persistent]

{

Index NameIDX On Name;

Property Name As %String;

}

Nameの照合は、SQLUPPERです (%Stringの既定)。Personテーブルに、以下のデータが含まれ ているとします。

名前 ID

Jones 1

JOHNSON 2

Smith 3

jones 4

SMITH 5

Nameのインデックスは、以下のエントリを持つことになります。

ID(s) 名前

2 JOHNSON

1, 4 JONES

3, 5 SMITH

SQL エンジンは、このインデックスを直接使用して、Nameフィールドを使用した ORDER BY や 比 較演算を実行します。

インデックスに使用する照合の既定にオーバーライドする場合は、スタジオのインデックス定義に As 節を追加します。

Class MyApp.Person Extends %Persistent [ClassType = persistent]

{

Index NameIDX On Name As Exact;

Property Name As %String;

}

この場合、NameIDX インデックスは EXACT 形式 (非照合) で値を保存することになります。上記の 例のデータを使用すると、以下のようになります。

ID(s) 名前

2 JOHNSON

1 Jones

4 jones

5 SMITH

3 Smith

この場合、SQL エンジンは EXACT 照合を要求するあらゆるクエリに対し、このインデックスを利用 できます。

通常、インデックスの照合は変更する必要はありません。別の照合機能を使用する場合は、プロパ ティ・レベルでそれを定義し、プロパティのインデックスに正しい照合を取得してください。

使用しているインデックスが複数のプロパティを使用するために定義されている場合は、個別に照 合を指定できます。

Index MyIDX On (Name As Exact, Code As SQLString);

照合

3.5.2 従来の照合関数

Caché は、%ALPHAUP、UPPER、%STRING などの従来の製品との互換性を保つため、従来の照合 関数も備えています。

4

テーブルの定義

Caché SQL でテーブルを定義するには、2 つの基本的な方法があります。

1. 永続クラス定義の生成 2. SQL DDL の使用

これらについて、以下で説明します。

ドキュメント内 Caché SQL の使用法 (ページ 34-39)

関連したドキュメント