以下のテーブルは、シンプルなINDEX式とそれぞれの結果をまとめたものです。
式 | 結果 |
---|---|
INDEX('catalog','log') | 5 |
INDEX('catalog','dog') | 0 |
INDEX('41424344'XB,'43'XB) | 3 |
次の例は、string_1のサーバー文字セットとstring_2のサーバー文字セットが異なる場合のINDEX(string_1, string_2)の動作を示したものです。この場合は両方の引数がUNICODEに変換され(必要な場合)、文字は論理的に照合されます。
string_1 | string_2 | 結果 | ||
---|---|---|---|---|
文字セット | データ | 文字セット | データ | |
UNICODE | 92 abc | LATIN | abc | 4 |
UNICODE | abc | UNICODE | c | 3 |
KANJISJIS | 92 04 | UNICODE | 0 | 4 |
次の例は、両方の引数のサーバー文字セットがKANJI1でクライアント文字セットがKanjiEBCDICの場合の、INDEX(string_1, string_2)の動作を示したものです。
KanjiEBCDICの場合、結果は物理単位として戻されるので、その環境のINDEX DB2に準拠するようになります。
string_1の内容 | string_2の内容 | 結果 |
---|---|---|
MN<AB > | <B > | 6 |
MN<AB > | <A > | 4 |
MN<AB >P | P | 9 |
MX N<AB >P | <B > | 7 |
次の例は、両方の引数のサーバー文字セットがKANJI1でクライアント文字セットがKanjiEUCの場合の、INDEX(string_1, string_2)の動作を示したものです。
string_1の内容 | string_2の内容 | 結果 |
---|---|---|
a b ss3 A | ss3 A | 3 |
a b ss2 B | ss2 B | 3 |
CS1_DATA | A | 6 |
a b ss2 D ss3 E ss2 F | ss2 F | 5 |
a b C ss2 D ss3 E ss2 F | ss2 F | 6 |
CS1_D mATA | A | 7 |
次の例は、両方の引数のサーバー文字セットがKANJI1でクライアント文字セットがKanjiShift-JISの場合の、INDEX(string_1, string_2)の動作を示したものです。
string_1の内容 | string_2の内容 | 結果 |
---|---|---|
mnABC X | B | 4 |
mnABC X | X | 6 |
この例では、EmployeeテーブルのName列に入っている文字列値内の' ' (スペース文字)にINDEXを適用します。
SELECT name FROM employee WHERE INDEX(name, ' ') > 6 ;
INDEXはNameフィールドを調べて、6番目を超えた文字位置(7番目以降の位置)にスペースが存在するすべての名前を戻します。
以下の例では、プロジェクト説明の中にBatchという語が入っているプロジェクトのリストを表示し、その語の開始位置をリストアップします。
SELECT proj_id, INDEX(description, 'Batch') FROM project WHERE INDEX(description, 'Batch') > 0 ;
システムは以下の報告を戻します。
proj_id Index (description, 'Batch') ------------- ---------------------------- OE2-0003 5 AP2-0003 13 OE1-0003 5 AP1-0003 13 AR1-0003 10 AR2-0003 10
連結、SUBSTRING、およびINDEXを使った、もう少し複雑な構造の文も有益でしょう。Employeeテーブルに次の値が入っているとします。
empno name ---------- ----------- 10021 Smith T 10007 Aguilar J 10018 Russell S 10011 Chin M 10019 Newman P
以下の問合わせを使用して、employeeテーブルから選択したname列の名前の形式を変更し、報告の中の句読点の表記を変更できます。
SELECT empno, SUBSTRING(name FROM INDEX(name,' ')+1 FOR 1)|| '. '|| SUBSTRING(name FROM 1 FOR INDEX(name, ' ')-1) (TITLE 'Emp Name') FROM employee ;
システムは以下の報告を戻します。
empno Emp Name ---------- -------------- 10021 T. Smith 10007 J. Aguilar 10018 S. Russell 10011 M. Chin 10019 P. Newman