に最終更新
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 |
+--------------------------------+