Symfoware Server SQLビギナーズガイド - FUJITSU - |
目次 索引 |
第6章 いろいろなデータ操作の方法 | > 6.2 いろいろな探索条件を指定する |
文字列型および各国語文字列型のデータについて、あるパターンの文字列に一致するかどうかを調べる場合に、LIKE述語を使用します。LIKE述語の結果は、列に、指定したパターンを含む場合、真となります。含まない場合、偽となります。指定した列またはパターンがNULL値の場合、結果は不定となります。なお、文字列型データ、各国語文字列型データ、およびパターン内の空白文字は、英字および各国語文字と同じように1文字として扱います。
また、LIKE述語に指定した列あるいはパターンが可変長の文字列の場合には、データの有効長の範囲で評価されます。LIKE述語の指定例を以下に示します。
例
会社表の会社名の中に“電気”を含む行を特定します。指定した結果を“図:LIKE述語による行の特定”に示します。
SELECT 会社番号, 会社名, 電話番号, 住所 FROM 在庫管理.会社表 WHERE 会社名 LIKE N'%電気%' (1) (2)(1) 列名
(2) パターン
(1)〜(2) LIKE述語
パターンは、文字列および任意文字列指示子と任意文字指示子で表します。任意文字列指示子と任意文字指示子の意味を以下に示します。パターンが文字列の場合は、英字で指定します。また、パターンが各国語の場合は、各国語文字で指定します。
指示子 |
記 号 |
記 号 の 意 味 |
---|---|---|
任意文字列指示子 |
% (英字) |
パターンの中のこの文字が位置する部分の文字は、任意の文字列(0個以上の文字列)であることを表します。 |
任意文字指示子 |
_(英字) |
パターンの中のこの文字が位置する部分の文字は、任意の文字(1文字)であることを表します。 |
任意文字列指示子“%”の使用例を以下に示します。“図: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
備考.表TBL5の列COL1は可変長です。そして、第1行の値は3文字です。第2行の値は右側に空白を含む6文字です。したがって、第1行と第2行は異なる値です。第3行以降についても第1行と同様に、アルファベットの文字の数が値の文字数です。値には空白は含みません。
任意文字指示子“_”の使用例を以下に示します。“図: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'
備考.表TBL5の列COL1は可変長です。そして、第1行の値は3文字です。第2行の値は、右側に空白を含む6文字です。したがって、第1行と第2行は異なる値です。
第3行以降についても第1行と同様に、アルファベットの文字の数が値の文字数です。
値には空白は含みません。
LIKE述語のパターンの指定において、“%”および“_”は任意文字位置の指定に使用しますが、任意文字位置の指定としてではなく、“%”および“_”自身を検索の対象とする場合に、エスケープ文字の指定を行います。指定例を以下に示します。“図: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 '$'
備考.表TBL5の列COL2は可変長です。そして、第1行の値は4文字です。第2行以降についても第1行と同様に、アルファベット、%、#、$および下線の数が値の文字数です。値には空白は含みません。
目次 索引 |