ページの先頭行へ戻る
Symfoware Server V10.0.0 アプリケーション開発ガイド(共通編)

9.2.4 値が文字列のパターンに一致するかを調べる

文字列型および各国語文字列型のデータについて、あるパターンの文字列に一致するかどうかを調べる場合に、LIKE述語を使用します。LIKE述語の結果は、列に、指定したパターンを含む場合、真となります。含まない場合、偽となります。指定した列またはパターンがNULL値の場合、結果は不定となります。なお、文字列型データ、各国語文字列型データ、およびパターン内の空白文字は、英字および各国語文字と同じように1文字として扱います。

また、LIKE述語に指定した列あるいはパターンが可変長の文字列の場合には、データの有効長の範囲で評価されます。LIKE述語の指定例を以下に示します。

会社表の会社名の中に“電気”を含む行を特定します。指定した結果を“図9.16 LIKE述語による行の特定”に示します。

SELECT 会社番号, 会社名, 電話番号, 住所 FROM 在庫管理.会社表

       WHERE  会社名   LIKE   N'%電気%' 
                 (1)              (2)

(1) 列名

(2) パターン

(1)~(2) LIKE述語

図9.16 LIKE述語による行の特定

パターンは、文字列および任意文字列指示子と任意文字指示子で表します。任意文字列指示子と任意文字指示子の意味を以下に示します。パターンが文字列の場合は、英字で指定します。また、パターンが各国語の場合は、各国語文字で指定します。

表9.6 任意文字列指示子と任意文字指示子の意味

指示子

任意文字列指示子

% (英字)
%(各国語文字)

パターンの中のこの文字が位置する部分の文字は、任意の文字列(0個以上の文字列)であることを表します。

任意文字指示子

_(英字)
_(各国語文字)

パターンの中のこの文字が位置する部分の文字は、任意の文字(1文字)であることを表します。

任意文字列指示子“%”の使用例

任意文字列指示子%”の使用例を以下に示します。“図9.17 LIKE述語の指定例(任意文字列指示子を使用した場合)”にどの行が特定されるかを示します。ここで使用する表TBL5はスキーマSCMに含まれます。

1

表TBL5の列COL1が“ABC”の行を特定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE 'ABC'

2

表TBL5の列COL1の先頭が“ABC”の行を特定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE 'ABC%'

3

表TBL5の列COL1の最後が“ABC”の行を特定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE '%ABC'

4

表TBL5の列COL1の任意の位置に“ABC”を含む行を特定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE '%ABC%'

5

表TBL5の列COL1の先頭が“AB”で最後が“C”の行を特定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE 'AB%C'

6

表TBL5の列COL1の先頭が“ABC”で最後が空白の行を特定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE 'ABC% '

7

表TBL5の列COL1の先頭が“ABC”の行を特定します。パターンを6バイトの固定長のホスト変数“HOST1”に設定する場合には、'ABC%'を指定します。後方の空白を外すためにTRIM関数で指定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE TRIM(TRAILING :HOST1)

8

表TBL5の列COL1の先頭が“ABC”の行を特定します。パターンを可変長のホスト変数“HOST1”に設定する場合には、'ABC%'を指定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE :HOST1

図9.17 LIKE述語の指定例(任意文字列指示子を使用した場合)

備考.表TBL5の列COL1は可変長です。そして、第1行の値は3文字です。第2行の値は右側に空白を含む6文字です。したがって、第1行と第2行は異なる値です。第3行以降についても第1行と同様に、アルファベットの文字の数が値の文字数です。値には空白は含みません。

任意文字指示子“_”の例

任意文字指示子_”の使用例を以下に示します。“図9.18 LIKE述語の指定例(任意文字指示子を使用した場合)”にどの行が特定されるかを示します。

1

表TBL5の列COL1の先頭が“ABC”で次の1文字が任意である4文字構成の行を特定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE 'ABC_'

2

表TBL5の列COL1の先頭が“ABC”で次の3文字が任意である6文字構成の行を特定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE 'ABC___'

3

表TBL5の列COL1の先頭1文字が任意でうしろが“ABC”である4文字構成の行を特定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE '_ABC'

4

表TBL5の列COL1の先頭2文字が任意でうしろが“ABC”である5文字構成の行を特定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE '__ABC'

5

表TBL5の列COL1の先頭が“A”で次の1文字が任意、そして最後が“BC”である4文字構成の行を特定します。

SELECT ・・・ FROM SCM.TBL5 WHERE COL1 LIKE 'A_BC'

図9.18 LIKE述語の指定例(任意文字指示子を使用した場合)

備考.表TBL5の列COL1は可変長です。そして、第1行の値は3文字です。第2行の値は、右側に空白を含む6文字です。したがって、第1行と第2行は異なる値です。
第3行以降についても第1行と同様に、アルファベットの文字の数が値の文字数です。
値には空白は含みません。

エスケープ文字

LIKE述語のパターンの指定において、“%”および“_”は任意文字位置の指定に使用しますが、任意文字位置の指定としてではなく、“%”および“_”自身を検索の対象とする場合に、エスケープ文字の指定を行います。指定例を以下に示します。“図9.19 LIKE述語の指定例(エスケープ文字を使用した場合)”にどの行が特定されるかを示します。

例1

表TBL5の列COL2が“ABC%”の行を特定します。

SELECT  …  FROM SCM.TBL5 WHERE COL2 LIKE  'ABC#%'  ESCAPE  '#' 
                                                            (1)

(1) エスケープ文字

“ESCAPE”のうしろに指定した文字(1文字だけ指定します)がエスケープ文字となります。このエスケープ文字を、文字パターン上、検索対象とする“%”または“_”の前に指定します。エスケープ文字には任意の文字が指定できます。


例2

表TBL5の列COL2の先頭が“ABC%%”の行を特定します。

SELECT  …  FROM SCM.TBL5 WHERE COL2 LIKE  'ABC#%#%%' ESCAPE '#' 

例3

表TBL5の列COL2の先頭2文字が任意で残りが“__ABC__”である9文字構成の行を特定します。

SELECT  …  FROM SCM.TBL5 WHERE COL2 LIKE  '__$_$_ABC$_$_' ESCAPE '$' 

図9.19 LIKE述語の指定例(エスケープ文字を使用した場合)

備考.表TBL5の列COL2は可変長です。そして、第1行の値は4文字です。第2行以降についても第1行と同様に、アルファベット、%、#、$および下線の数が値の文字数です。値には空白は含みません。