に最終更新
POSITION
説明
POSITION 関数は、対象文字列内で部分文字列が現れる位置を検索します。位置は 1 から数えます。
構文
POSITION(<substr> IN <str>)
POSITION(<substr>, <str> [, <pos>])
パラメータ
| パラメータ | 説明 |
|---|---|
substr | 検索する部分文字列。型:VARCHAR |
str | 検索対象の文字列。型:VARCHAR |
pos | 省略可能。検索を開始する位置(1 から数えます)を指定します。指定した場合、その位置から検索します。 |
戻り値
対象文字列内で部分文字列が最初に現れる位置を表す INT 型の値を返します。
検索規則:
- 位置は 1 から数えます。
- 部分文字列が見つからない場合は 0 を返します。
- 開始位置を指定した場合は、その位置から検索します。
- 大文字と小文字を区別します。
特殊なケース:
- いずれかのパラメータが NULL の場合は NULL を返します。
- 部分文字列が空文字列の場合は 1(開始位置を指定した場合はその位置)を返します。
- 開始位置が文字列の長さを超える場合は 0 を返します。
- 開始位置が負の値の場合は、文字列の先頭から検索します。
例
- 基本的な検索(両方の構文)
SELECT POSITION('bar' IN 'foobarbar'), POSITION('bar', 'foobarbar');
+----------------------------------+--------------------------------+
| POSITION('bar' IN 'foobarbar') | POSITION('bar', 'foobarbar') |
+----------------------------------+--------------------------------+
| 4 | 4 |
+----------------------------------+--------------------------------+
- 開始位置を指定した検索
SELECT POSITION('bar', 'foobarbar', 5), POSITION('xbar', 'foobar');
+-----------------------------------+----------------------------------+
| POSITION('bar', 'foobarbar', 5) | POSITION('xbar', 'foobar') |
+-----------------------------------+----------------------------------+
| 7 | 0 |
+-----------------------------------+----------------------------------+
- NULL 値の処理
SELECT POSITION('test' IN NULL), POSITION(NULL, 'test');
+--------------------------+------------------------+
| POSITION('test' IN NULL) | POSITION(NULL, 'test') |
+--------------------------+------------------------+
| NULL | NULL |
+--------------------------+------------------------+
- 空文字列の処理
SELECT POSITION('' IN 'hello'), POSITION('world' IN '');
+------------------------+------------------------+
| POSITION('' IN 'hello') | POSITION('world' IN '') |
+------------------------+------------------------+
| 1 | 0 |
+------------------------+------------------------+
- 大文字と小文字を区別する検索
SELECT POSITION('World' IN 'Hello World'), POSITION('world' IN 'Hello World');
+----------------------------------+----------------------------------+
| POSITION('World' IN 'Hello World') | POSITION('world' IN 'Hello World') |
+----------------------------------+----------------------------------+
| 7 | 0 |
+----------------------------------+----------------------------------+
- 異なる位置からの検索
SELECT POSITION('a', 'banana', 1), POSITION('a', 'banana', 3);
+-----------------------------+-----------------------------+
| POSITION('a', 'banana', 1) | POSITION('a', 'banana', 3) |
+-----------------------------+-----------------------------+
| 2 | 4 |
+-----------------------------+-----------------------------+
- UTF-8 のマルチバイト文字
SELECT POSITION('ḍḍumai' IN 'ṭṛì ḍḍumai hello'), POSITION('hello', 'ṭṛì ḍḍumai hello', 8);
+-------------------------------------------------------+---------------------------------------------------+
| POSITION('ḍḍumai' IN 'ṭṛì ḍḍumai hello') | POSITION('hello', 'ṭṛì ḍḍumai hello', 8) |
+-------------------------------------------------------+---------------------------------------------------+
| 5 | 12 |
+-------------------------------------------------------+---------------------------------------------------+
- 特殊文字の検索
SELECT POSITION('@' IN 'user@domain.com'), POSITION('.', 'user@domain.com', 10);
+----------------------------------+--------------------------------------+
| POSITION('@' IN 'user@domain.com') | POSITION('.', 'user@domain.com', 10) |
+----------------------------------+--------------------------------------+
| 5 | 12 |
+----------------------------------+--------------------------------------+
- 範囲外の開始位置
SELECT POSITION('test', 'hello world', 20), POSITION('test', 'hello world', 0);
+--------------------------------------+-------------------------------------+
| POSITION('test', 'hello world', 20) | POSITION('test', 'hello world', 0) |
+--------------------------------------+-------------------------------------+
| 0 | 0 |
+--------------------------------------+-------------------------------------+
- 数字と記号を含む文字列の検索
SELECT POSITION('123' IN '456123789'), POSITION('-', 'phone: 123-456-7890', 11);
+------------------------------+-------------------------------------------+
| POSITION('123' IN '456123789') | POSITION('-', 'phone: 123-456-7890', 11) |
+------------------------------+-------------------------------------------+
| 4 | 11 |
+------------------------------+-------------------------------------------+