3

私のテーブルの列の1つ(たとえば、と呼ばれるfoo)には、10個の数値のセットが格納されています。例:

1, 5, 8, 3, 4, 6, 9, 7, 12, 15

6列に番号が含まれているテーブルのすべての行を選択したいと思いfooます。

まあ、これは十分に単純に聞こえるかもしれませんが、列で文字列検索を実行するだけです。16ただし、問題は、を16含む行を選択すること6です。

, 6,代わりに検索することも考えまし6たが、文字列の最後または前にあると一致しないことに気付きました。

どうすればこの問題を克服できますか?

4

2 に答える 2

6

と呼ばれるMySQL組み込み関数を使用しますFIND_IN_SET

SELECT *
FROM   tablename
WHERE  FIND_IN_SET('6', REPLACE(foo,' ','')) > 0

ドキュメントから:

文字列strがN個のサブ文字列で構成される文字列リストstrlistにある場合は、1からNの範囲の値を返します。文字列リストは、「、」文字で区切られた部分文字列で構成される文字列です。最初の引数が定数文字列で、2番目の引数がSET型の列である場合、FIND_IN_SET()関数はビット演算を使用するように最適化されます。 strがstrlistにない場合、またはstrlistが空の文字列の場合は、0を返します。 いずれかの引数がNULLの場合、NULLを返します。最初の引数にコンマ(“、”)文字が含まれている場合、この関数は正しく機能しません。

于 2013-03-25T09:15:59.290 に答える
3

', 'を最初と最後に追加してfoo検索できます。

SELECT *
FROM bar
WHERE ', ' + foo + ', ' LIKE '%, 6, %'
于 2013-03-25T09:18:46.970 に答える