0

テーブルの列に次の 2 つの文字列行が含まれているとします。

       1, 5, 2, 31, 12, 1212, 111
       21, 25, 32, 43, 112, 212, 311

1数値と数値を含む行を選択するクエリが必要です2

私のクエリは次のとおりです。

      SELECT *
      FROM MyTable
      WHERE My_String LIKE '%1%' AND My_String LIKE '%2%'

最初の行のみを返したい場合、これは両方の行を返します。

数字には numberと21, 25, 32, 112, 212, 311も含まれているため、2 行目を選択します。12

私の質問は、数字が文字列に含まれているが2〜3桁の数字に含まれていない1すべての行を選択する方法です。それらに2厳密に一致させたい12

4

3 に答える 3

2

http://www.sqlfiddle.com/#!2/b082d/5

select * from testtable
where instr(concat(', ', longstring, ', '), ', 2,') >0;

select * from testtable
where instr(concat(', ', longstring, ', '), ', 1,') >0 
and  instr(concat(', ', longstring, ', '), ', 2,') >0;
于 2012-11-24T19:57:09.037 に答える
1

正規表現を使用できます。[[:<:]] は開始単語境界で、[[:>:]] は終了単語境界です。

SELECT * FROM MyTable
WHERE My_String RLIKE '[[:<:]]1[[:>:]]'
AND   My_String RLIKE '[[:<:]]2[[:>:]]'
于 2012-11-24T19:30:06.573 に答える
0

いくつかのオプションがあります:

1-メイン投稿のコメントで述べたように、構造を変更し、連結された文字列を保存しないでください

2- 文字列を分割し、分割後に数字 1 と 2 がトークンに表示されるかどうかをチェックする関数を作成します。

3- 文字列が出現するあらゆる可能性を捉える「where」句を書く: 文字列は、リストの最初、中間、最後、またはリスト内の唯一の要素に出現する可能性があります。1 と 2 を連続して表示する必要があるため、最後の 1 つは重要ではありません。したがって、1 つの要素を含むリスト String は削除する必要があります。それで:

select *
from MyTable
where (My_String like '1,%'  or My_String like '%, 1,%' or My_String like '%, 1') 
and (My_String like '2,%'  or My_String like '%, 2,%' or My_String like '%, 2')
于 2012-11-24T19:57:23.857 に答える