mysql regexp有一个数字,但不是以负数开头

时间:2013-02-19 15:45:05

标签: mysql regex

我的行包含-4,3,2,13,2,132

等值

我需要选择任何值为2的行,包括值为3,2,1的行,但不要选择具有 - 开头的行。

谢谢你们。

3 个答案:

答案 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]'