SQL道場 文字列関数 FIND_IN_SET関数

カンマで区切られた文字の中から文字を探すFIND_IN_SET関数について記載しています。

対応データベースMySQL

FIND_IN_SET関数の文法

SELECT FIND_IN_SET(探す文字,文字列) FROM テーブル
引数探す文字文字列型
文字列文字列型
返値文字列型 変換後の文字列

FIND_IN_SET関数はカンマで区切られた文字列内から文字を探し、何番目に見つかったかを数値で返します。見つからなかった場合は0(ゼロ)を返します。

実行例

MySQLの実行例

文字がカンマで区切られた文字列内の何番目にあるかを探します。

/* カンマで区切られた文字の中から文字を探すサンプル */
SELECT FIND_IN_SET('D','A,B,C,D,E,F');
FIND_IN_SET関数サンプル実行結果

カンマ区切りでセットされているレコードを検索する方法

カンマ区切りデータの中に「1」という文字が入っているレコードを抽出します。その場合はFIND_IN_SET関数を使用することで抽出することができます。テーブルにCSVファイルのデータを格納している場合の検索に使用することができます。

使用するテーブル

NoCSVデータ
1abc,def,g
21,2,3
3123,456,789
41,12,15
5apple,google
6google,msn

1つのキーワード検索

/* カンマ区切りでセットされているレコードを検索する方法 */
SELECT no,csv FROM testdb.WORK where find_in_set(1,csv);
FIND_IN_SET関数サンプル実行結果

ORを使ったキーワード検索

/* カンマ区切りでセットされているレコードを2つ以上のキーワードで検索する方法 */
SELECT no,csv FROM testdb.WORK where find_in_set(1,csv) or find_in_set('apple',csv);
FIND_IN_SET関数サンプル実行結果

ANDを使ったキーワード検索

/* カンマ区切りでセットされているレコードをANDを使った検索する方法 */
SELECT no,csv FROM testdb.WORK where find_in_set(1,csv) AND find_in_set(2,csv);
FIND_IN_SET関数サンプル実行結果