に最終更新
INSTR
説明
INSTR 関数は、文字列内で部分文字列が最初に現れる位置を、1 から数えて返します。完全一致で検索し、大文字と小文字を区別する文字列検索関数です。テキスト処理、データクレンジング、文字列の分析などに使用します。
構文
INSTR(<str>, <substr>)
パラメータ
| パラメータ | 説明 |
|---|---|
<str> | 検索対象の文字列。型: VARCHAR |
<substr> | 検索する部分文字列。型: VARCHAR |
戻り値
部分文字列が最初に現れる位置を表す INT 型の値を返します。
検索の規則:
- 位置は 0 ではなく 1 から数えます
- 部分文字列が見つからない場合は 0 を返します
- 大文字と小文字を区別します
- UTF-8 のマルチバイト文字についても位置を正しく計算します
- 空文字列は特別に扱います
特殊なケース:
- いずれかの引数が NULL の場合は NULL を返します
- 部分文字列が空文字列の場合は 1 を返します(空文字列はどの位置にも「存在する」ため)
- 検索対象の文字列が空で、部分文字列が空でない場合は 0 を返します
- 特殊文字や記号を含む部分文字列も検索できます
例
- 基本的な文字の検索
SELECT INSTR('abc', 'b'), INSTR('abc', 'd');
+-------------------+-------------------+
| INSTR('abc', 'b') | INSTR('abc', 'd') |
+-------------------+-------------------+
| 2 | 0 |
+-------------------+-------------------+
- 部分文字列の検索
SELECT INSTR('hello world', 'world'), INSTR('hello world', 'WORLD');
+------------------------------+------------------------------+
| INSTR('hello world', 'world') | INSTR('hello world', 'WORLD') |
+------------------------------+------------------------------+
| 7 | 0 |
+------------------------------+------------------------------+
- NULL 値の扱い
SELECT INSTR(NULL, 'test'), INSTR('test', NULL);
+---------------------+---------------------+
| INSTR(NULL, 'test') | INSTR('test', NULL) |
+---------------------+---------------------+
| NULL | NULL |
+---------------------+---------------------+
- 空文字列の扱い
SELECT INSTR('hello', ''), INSTR('', 'world');
+--------------------+---------------------+
| INSTR('hello', '') | INSTR('', 'world') |
+--------------------+---------------------+
| 1 | 0 |
+--------------------+---------------------+
- 同じ部分文字列が複数回現れる場合(最初の一致位置を返す)
SELECT INSTR('abcabc', 'abc'), INSTR('banana', 'a');
+------------------------+----------------------+
| INSTR('abcabc', 'abc') | INSTR('banana', 'a') |
+------------------------+----------------------+
| 1 | 2 |
+------------------------+----------------------+
- 特殊文字と記号
SELECT INSTR('user@example.com', '@'), INSTR('price: $99.99', '$');
+--------------------------------+-----------------------------+
| INSTR('user@example.com', '@') | INSTR('price: $99.99', '$') |
+--------------------------------+-----------------------------+
| 5 | 8 |
+--------------------------------+-----------------------------+
- UTF-8 のマルチバイト文字
SELECT INSTR('ṭṛì ḍḍumai hello', 'ḍḍumai'), INSTR('ṭṛì ḍḍumai hello', 'hello');
+--------------------------------------------------+---------------------------------------------+
| INSTR('ṭṛì ḍḍumai hello', 'ḍḍumai') | INSTR('ṭṛì ḍḍumai hello', 'hello') |
+--------------------------------------------------+---------------------------------------------+
| 5 | 12 |
+--------------------------------------------------+---------------------------------------------+
- 数字の文字列
SELECT INSTR('123456789', '456'), INSTR('123-456-789', '-');
+---------------------------+---------------------------+
| INSTR('123456789', '456') | INSTR('123-456-789', '-') |
+---------------------------+---------------------------+
| 4 | 4 |
+---------------------------+---------------------------+
- 複数の単語からなる文字列内での検索
SELECT INSTR('The quick brown fox', 'quick'), INSTR('The quick brown fox', 'slow');
+---------------------------------------+--------------------------------------+
| INSTR('The quick brown fox', 'quick') | INSTR('The quick brown fox', 'slow') |
+---------------------------------------+--------------------------------------+
| 5 | 0 |
+---------------------------------------+--------------------------------------+
- パスと URL の検索
SELECT INSTR('/home/user/file.txt', '/'), INSTR('https://www.example.com', '://');
+-----------------------------------+-----------------------------------------+
| INSTR('/home/user/file.txt', '/') | INSTR('https://www.example.com', '://') |
+-----------------------------------+-----------------------------------------+
| 1 | 6 |
+-----------------------------------+-----------------------------------------+