-4,3,2,1
and 3,2,1
or 3
orのような値を持つ行があります2
2
値を持つ行を含む値を持つ行を選択する必要がありますが、最初は値を持つ行は選択し3,2,1
ません。
みんなありがとう
なぜ正規表現なのか?
SELECT ..
WHERE LEFT(yourfield, 1) <> '-'
AND (
(yourfield = 2) OR
(yourfield LIKE '2,%') OR
(yourfield LIKE '%,2,%') OR
(yourfield LIKE '%,2')
)
次に、WHEREが非常に複雑である理由を理解しようとしているときに、データベースの正規化について確認する必要があります。
私はこれを行う傾向がありますlike
:
select *
from t
where concat(',', col, ',') like '%,2,%' and
col not like '-%'
「2」を探しているが、カンマで区切られていない場合:
select *
from t
where instr(col, '2') > 0 and col not like '-%'
マイナス記号で始まらず、「2」を含む列を取得するには:
where col regexp '^[^-]*2*'
コンマが重要な場合は、次のように動作するはずです。
where concat(',', col, ',') regexp ',^[^-]*,2,*'
最良の解決策と私が見つけることができる最も簡単なもの:
where sponsored regexp '^[^-]*[1-2]'