MySQL :: find_in_set() 関数
find_in_set()という便利な関数を見つけたのでご紹介いたします。
find_in_set()
N 個の部分文字列で構成されるリスト strlist に、文字列 str が含まれている場合は、1 から N までのいずれかの値を返す。
文字列のリストは、それぞれの間を カンマ‘,’文字で区切られた各部分文字列で構成される文字列である。
最初の引数が定数文字列で、2 番目の引数が SET 型のカラムの場合、FIND_IN_SET() 関数はビット演算を使用するよう最適化される。
str が strlist に含まれていない場合や、strlist が空の文字列の場合は、0 を返す。どちらの引数も NULL の場合は、NULL を返す。
最初の引数に カンマ‘,’ が含まれていると、この関数は正しく動作しない。
id | number |
---|---|
1 | 1,3,5,6,7 |
2 | 2,4,5,7 |
3 | 1 |
4 | 4,12 |
5 | 15,17 |
上記テーブルより「カラム numberに “1” がある」という条件でレコード抽出を行うとします。
SELECT文のWHERE句でnumber = 1 を指定してもid 3 のデータしかヒットしません。
そこでfind_in_set() を使います。
テーブルの名前をsampleとします。
1 | SELECT * FROM sample WHERE FIND_IN_SET('1', number); |
こうすることにより、id 1 と 3 のデータがヒットします。
Author Profile
スターフィールド編集部
SHARE