代码之家  ›  专栏  ›  技术社区  ›  code_burgar

仅选择MySQL中仅包含字母数字字符的行

  •  38
  • code_burgar  · 技术社区  · 16 年前

    我尝试选择MySQL中只包含字母数字字符的所有行,方法是:

    SELECT * FROM table WHERE column REGEXP '[A-Za-z0-9]';
    

    但是,它返回所有行,而不管它们包含非字母数字字符。

    6 回复  |  直到 9 年前
        1
  •  71
  •   Jess Stone CY5    11 年前

    尝试此代码:

    SELECT * FROM table WHERE column REGEXP '^[A-Za-z0-9]+$'
    

    这将确保所有字符匹配。

        2
  •  8
  •   John Kugelman Michael Hodel    16 年前

    您的语句匹配任何在任何地方包含字母或数字的字符串,即使它包含其他非字母数字字符。试试这个:

    SELECT * FROM table WHERE column REGEXP '^[A-Za-z0-9]+$';
    

    ^ $ 要求整个字符串匹配,而不是只匹配其中的任何部分,以及 + 寻找1 或更多 字母数字字符。

    如果愿意,还可以使用命名字符类:

    SELECT * FROM table WHERE column REGEXP '^[[:alnum:]]+$';
    
        3
  •  3
  •   Yannick Motton    16 年前

    试试这个:

    REGEXP '^[a-z0-9]+$'
    

    因为regexp不区分大小写,除了二进制字段。

        4
  •  0
  •   apollo    9 年前

    还有:

    select m from table where not regexp_like(m, '^[0-9]\d+$')
    

    选择包含所需列中字符的行(示例中为m,但可以更改)。

    大多数组合在Oracle平台上都不能正常工作,但确实如此。分享以备将来参考。

        5
  •  -1
  •   Andy Ali    9 年前

    试试这个

    select count(*) from table where cast(col as double) is null;
    
        6
  •  -6
  •   GDP Danny    13 年前

    改变 REGEXP Like

    SELECT * FROM table_name WHERE column_name like '%[^a-zA-Z0-9]%'
    

    这个很好用