FIND_IN_SET
説明
カンマ区切りの文字列リストstrlist内で、文字列strが最初に出現する位置を返します(カウントは1から開始)。この関数はMySQL互換モードで実装されており、カンマ区切り値リスト内の特定の文字列を検索するために使用されます。
構文
FIND_IN_SET(<str>, <strlist>)
パラメータ
| パラメータ | 説明 |
|---|---|
<str> | 検索対象の文字列。型: VARCHAR |
<strlist> | strを検索するカンマ区切りの文字列リスト。型: VARCHAR |
戻り値
INT型を返し、strlistにおけるstrの位置を表します(カウントは1から開始)。
検索ルール:
- 完全一致: strがstrlist内の部分文字列と完全に一致する場合のみ位置を返します
- 位置のカウントは1から開始
- 最初に一致した位置を返します
特殊なケース:
- strが空文字列の場合、0を返します
- strlistが空文字列の場合、0を返します
- 一致するものが見つからない場合、0を返します
- いずれかのパラメータがNULLの場合、NULLを返します
- strにカンマが含まれている場合、正しくマッチできません(カンマは区切り文字のため)
- マッチングは大文字小文字を区別します
例
- 基本的な検索
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 |
+--------------------------------+