FIND_IN_SET
説明
カンマ区切りの文字列リストstrlist内で、文字列strが最初に出現する位置を返します(カウントは1から開始)。この関数はMySQL互換モードで実装されており、カンマ区切り値リスト内の特定の文字列を見つけるために使用されます。
構文
FIND_IN_SET(<str>, <strlist>)
パラメータ
| Parameter | デスクリプション |
|---|---|
<str> | 検索対象の文字列。型: VARCHAR |
<strlist> | str を検索するカンマ区切りの文字列リスト。型: VARCHAR |
Return Value
INT型を返し、strlist内でのstrの位置を表します(カウントは1から開始)。
検索ルール:
- 完全一致: strがstrlist内の部分文字列と完全に一致した場合のみ位置を返す
- 位置のカウントは1から開始
- 最初にマッチした位置を返す
特殊なケース:
- strが空文字列の場合、0を返す
- strlistが空文字列の場合、0を返す
- マッチが見つからない場合、0を返す
- いずれかのパラメータがNULLの場合、NULLを返す
- strにカンマが含まれている場合、正しくマッチできません(カンマが区切り文字のため)
- マッチング処理は大文字小文字を区別する
Examples
- 基本的な検索
SELECT FIND_IN_SET('b', 'a,b,c');
+---------------------------+
| FIND_IN_SET('b', 'a,b,c') |
+---------------------------+
| 2 |
+---------------------------+
- 最初の要素を見つける
SELECT FIND_IN_SET('apple', 'apple,banana,cherry');
+------------------------------------------+
| FIND_IN_SET('apple', 'apple,banana,cherry') |
+------------------------------------------+
| 1 |
+------------------------------------------+
- 最後の要素を見つける
SELECT FIND_IN_SET('cherry', 'apple,banana,cherry');
+-------------------------------------------+
| FIND_IN_SET('cherry', 'apple,banana,cherry') |
+-------------------------------------------+
| 3 |
+-------------------------------------------+
- 一致するものが見つかりませんでした
SELECT FIND_IN_SET('orange', 'apple,banana,cherry');
+--------------------------------------------+
| FIND_IN_SET('orange', 'apple,banana,cherry') |
+--------------------------------------------+
| 0 |
+--------------------------------------------+
- NULL値の処理
SELECT FIND_IN_SET(NULL, 'a,b,c'), FIND_IN_SET('b', NULL);
+---------------------------+-------------------------+
| FIND_IN_SET(NULL, 'a,b,c') | FIND_IN_SET('b', NULL) |
+---------------------------+-------------------------+
| NULL | NULL |
+---------------------------+-------------------------+
- 空文字列の処理
SELECT FIND_IN_SET('', 'a,b,c'), FIND_IN_SET('a', '');
+-------------------------+-----------------------+
| FIND_IN_SET('', 'a,b,c') | FIND_IN_SET('a', '') |
+-------------------------+-----------------------+
| 0 | 0 |
+-------------------------+-----------------------+
- カンマを含む文字列(正しくマッチできません)
SELECT FIND_IN_SET('a,b', 'a,b,c,d');
+------------------------------+
| FIND_IN_SET('a,b', 'a,b,c,d') |
+------------------------------+
| 0 |
+------------------------------+
- 大文字と小文字を区別したマッチング
SELECT FIND_IN_SET('B', 'a,b,c'), FIND_IN_SET('b', 'A,B,C');
+---------------------------+---------------------------+
| FIND_IN_SET('B', 'a,b,c') | FIND_IN_SET('b', 'A,B,C') |
+---------------------------+---------------------------+
| 0 | 0 |
+---------------------------+---------------------------+
- 部分一致は成功しません
SELECT FIND_IN_SET('ap', 'apple,banana,cherry');
+---------------------------------------+
| FIND_IN_SET('ap', 'apple,banana,cherry') |
+---------------------------------------+
| 0 |
+---------------------------------------+
- 数値文字列検索
SELECT FIND_IN_SET('2', '1,2,3,10,20');
+--------------------------------+
| FIND_IN_SET('2', '1,2,3,10,20') |
+--------------------------------+
| 2 |
+--------------------------------+