Oracle SQLで文字列を操作するとき、指定した文字や文字列がどの位置に存在するかを確認したい場面があります。そのような場合に利用できるのがINSTR関数です。
INSTR関数は、文字列の中から指定した文字列を検索し、最初に見つかった位置を返すことができる便利な文字列関数です。データ加工や条件検索、文字列解析など、さまざまなSQL処理で活用されています。
この記事では、Oracle SQLのINSTR関数の基本的な使い方から、検索開始位置の指定、複数回出現する文字の検索方法、実際の利用例まで詳しく解説します。
Oracle SQLのINSTR関数とは
INSTR関数は、指定した文字列の中から検索対象となる文字列を探し、その位置を数値で返すOracle SQLの関数です。
例えば、「Oracle Database」という文字列の中から「D」という文字を検索した場合、「D」が何文字目に存在するかを取得できます。
基本的な構文は以下のようになります。
INSTR(検索対象の文字列,検索する文字列)
INSTR関数は、検索対象の文字列内に指定した文字列が存在する場合、その開始位置を返します。存在しない場合は0を返します。
INSTR関数で最初に現れる位置を取得する方法
INSTR関数の最も基本的な使い方は、文字列内で指定した文字が最初に登場する位置を取得する方法です。
例えば、以下のSQLを実行します。
SELECT INSTR(‘Oracle SQL’,’S’) FROM dual;
この場合、「Oracle SQL」の中で「S」が最初に登場する位置が返されます。
文字列の位置は1から数えます。そのため、先頭の文字は1、2番目の文字は2というように数えられます。
例えば、「Apple」という文字列で「p」を検索すると、最初の「p」の位置である2が返されます。
INSTR関数で文字列を検索する具体例
INSTR関数は、単一の文字だけではなく複数文字の検索にも対応しています。
例えば、以下のようなSQLがあります。
SELECT INSTR(‘https://example.com’,’example’) FROM dual;
このSQLでは、「https://example.com」という文字列の中で「example」が開始される位置を取得できます。
メールアドレスやURL、ファイルパスなど、特定の文字列が含まれる場所を調べたい場合にも利用できます。
INSTR関数で検索開始位置を指定する方法
INSTR関数では、検索を開始する位置を指定することもできます。基本構文は以下の形式です。
INSTR(文字列,検索文字列,開始位置)
例えば、以下のSQLでは5文字目以降から検索を開始します。
SELECT INSTR(‘Oracle Database’,’a’,5) FROM dual;
このように開始位置を指定すると、文字列の途中から検索したい場合に便利です。
例えば、長い文章データの中で特定のキーワードが後半部分に存在するか確認するといった処理で利用できます。
INSTR関数で2回目以降に出現する文字を検索する方法
同じ文字が複数存在する場合、INSTR関数では何回目に出現する文字を探すか指定できます。
構文は以下のようになります。
INSTR(文字列,検索文字列,開始位置,出現回数)
例えば、以下のSQLでは「a」が2回目に出現する位置を取得します。
SELECT INSTR(‘banana’,’a’,1,2) FROM dual;
このように出現回数を指定することで、最初の一致ではなく2番目、3番目の一致位置を取得できます。
CSV形式のデータや区切り文字の位置を取得するときなどに、この機能が役立ちます。
INSTR関数をWHERE句で利用する方法
INSTR関数は、検索条件を指定するWHERE句でも利用できます。
例えば、商品名に「SQL」という文字を含むデータだけを取得したい場合、以下のようなSQLを作成できます。
SELECT * FROM products WHERE INSTR(product_name,’SQL’) > 0;
INSTR関数は、指定した文字列が存在するときは1以上の値を返し、存在しない場合は0になります。そのため、0より大きいかどうかで文字列の存在を判定できます。
LIKE演算子でも同じような検索は可能ですが、INSTR関数は検索位置を取得できるため、文字列加工処理などにも利用できる点が特徴です。
INSTR関数を利用するときの注意点
INSTR関数は便利な文字列検索機能ですが、検索対象や文字コードによって結果が変わる場合があります。
特に日本語などのマルチバイト文字を扱う場合は、文字数の数え方に注意が必要です。通常のINSTR関数では文字単位で位置を返します。
また、検索対象の文字列や検索文字列がNULLの場合、結果もNULLになるため、SQLを作成するときはNULLデータへの対応も考慮すると安全です。
INSTR関数とLIKE検索の違い
文字列検索ではLIKE演算子を利用することも多くありますが、INSTR関数とは目的が異なります。
LIKEは「指定文字列が含まれているか」を判定するための検索向けです。一方、INSTRは「どの位置に存在するか」を取得できる点が大きな違いです。
例えば、単純に「商品名にパソコンという文字が含まれる商品を探す」場合はLIKEが適しています。しかし、「商品名の何文字目からカテゴリ名が始まるか調べたい」といった処理ではINSTRが便利です。
まとめ
Oracle SQLのINSTR関数は、文字列内で指定した文字や文字列が最初に現れる位置を取得するための関数です。
基本的な使い方では検索対象の文字列と検索する文字列を指定するだけで、最初に一致した位置を取得できます。また、開始位置や出現回数を指定することで、より細かな検索処理も可能です。
文字列検索だけでなく、データ加工やWHERE句での条件指定など幅広い用途で利用できるため、Oracle SQLで文字列処理を行う場合は覚えておきたい基本関数の1つです。

コメント