我的行包含-4,3,2,1
和3,2,1
或3
或2
我需要选择任何值为2
的行,包括值为3,2,1
的行,但不要选择具有 - 开头的行。
答案 0 :(得分:1)
为什么要使用正则表达式?
SELECT ..
WHERE LEFT(yourfield, 1) <> '-'
AND (
(yourfield = 2) OR
(yourfield LIKE '2,%') OR
(yourfield LIKE '%,2,%') OR
(yourfield LIKE '%,2')
)
然后当你试图找出WHERE为何如此复杂时,你应该阅读database normalization
答案 1 :(得分:1)
我倾向于使用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,*'
答案 2 :(得分:0)
最好的解决方案,也是我能找到的最简单的解决方案:
where sponsored regexp '^[^-]*[1-2]'