LIKE、IN 、BETWEEN、IS NULL 比較演算子
SQL および PL/SQL の両方において使用することができる演算子。
LIKE 比較
パターンマッチング: '%' は0文字以上の任意文字にマッチする(※)。 '_' 文字は1文字の任意文字にマッチする。
(※) LIKE では パーセント('%' または 全角 '%') 、アンダースコア('_' または '_') の特殊記号を使用して前方一致(%〜)、後方一致(〜%)、部分一致(〜%〜)を記述することができる。 但し '%' を単独で使用した場合 「すべての文字列」 となるのであるが NULL および 「長さ0の文字列」 には該当しない。(NULL の仕様:Oracle 10g R2 時点)
LIKE には各国語キャラクタセットに使用する特定のコードポイント向けの演算子がある。
- LIKEC : 完全な Unicode 用 (LIKEC はマルチバイト文字を1文字として扱う)
- LIKE2 : UCS2 用
- LIKE4 : UCS4 用
SQL> declare
2 vstr varchar2(10);
3 begin
4 vstr := '東京都';
5 if (vstr LIKE '%京都%') then
6 dbms_output.put_line('文字列に京都が含まれています');
7 end if;
8 end;
9 /
文字列に京都が含まれています
'_' は1文字の任意の文字にマッチする
SQL> declare
2 vstr varchar2(10);
3 begin
4 vstr := '東京都';
5 if (vstr LIKE '__都') then
6 dbms_output.put_line('文字列は??都です');
7 end if;
8 end;
9 /
文字列は??都です
ワイルドカード文字のエスケープ ESCAPE '任意文字'
SQL> declare
2 vstr varchar2(20);
3 begin
4 vstr := 'オレンジ100%ジュース';
5 if (vstr LIKE '%\%%' ESCAPE '\') then
6 dbms_output.put_line('文字列に%が含まれています');
7 end if;
8 end;
9 /
文字列に%が含まれています
IN 比較
IN は 括弧を使っているので IN ファンクションと思われていることもあるかもしれないが item IN ( item_list ) に代表されるように二つの項を必要とする演算子である。
SQL> declare
2 vstr varchar2(10);
3 begin
4 vstr := '東京';
5 if (vstr IN ('茨城','栃木','群馬','埼玉','千葉','東京')) then
6 dbms_output.put_line('関東地方です');
7 end if;
8 end;
9 /
関東地方です
複数項目のメンバーとのメンバーセットの比較は Oracle 10g 現在ではサポートされていない(SQL では可能)。
IN に指定できるリストは最大で 1000 個 ⇒ 参考:SQLの制限事項。副問い合わせの結果セットの件数には制限ない。
BEWEEN a AND b 比較
SQL> declare
2 vnum NUMBER;
3 begin
4 vnum := 5;
5 if (vnum BETWEEN 1 AND 10) then
6 dbms_output.put_line('NUMBER 変数は 1 以上 10 以下');
7 end if;
8 end;
9 /
NUMBER 変数は 1 以上 10 以下
IS NULL または IS NOT NULL 比較
IS NULL に関しては特別で NOT を条件内に含む演算子を専用に持っている
SQL> declare
2 vnum NUMBER;
3 begin
4 if (vnum IS NULL) then
5 dbms_output.put_line('NUMBER 変数は 初期化されていません');
6 end if;
7 end;
8 /
NUMBER 変数は 初期化されていません
比較条件に関連する内容