17.10 - 例: 単純なINDEX式の使用 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL関数、式、および述部

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1145-171K-JPN
Language
日本語 (日本)

以下のテーブルは、シンプルな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