【问题标题】:MySQL REGEXP No Whitespaces No NumbersMySQL REGEXP 没有空格没有数字
【发布时间】:2012-11-29 11:37:49
【问题描述】:

我试图只返回 colA 和 colB 不包含数字或空格的行

到目前为止,这是我的代码。

SELECT * FROM table_name WHERE colA REGEXP '[^0-9^\W]' AND colB REGEXP '[^0-9^\W]'

给定数据集

   colA        colB
---------- ----------
     test |  testB
      33  |  text    <- this is not returned
     blah |  0123A   <- this is returned

我假设我的问题与我的正则表达式有关...请帮忙?

【问题讨论】:

    标签: mysql regex


    【解决方案1】:

    您的表达式不起作用,因为:33 都是数字,并且您正在寻找任何非小数、非空白字符。所以它不包括结果中的那一行。

    试试:

    SELECT * FROM table_name WHERE colA NOT REGEXP '[0-9[:space:]]' AND colB NOT REGEXP '[0-9[:space:]]'
    

    ETA:是的,忘记了 \whatever 不起作用

    【讨论】:

    • 好的,那么我将如何过滤掉任何包含数字的东西......和“只是一个空格”。基本上我有一个包含很多无效值的数据导入。 (包含数字或完全丢失的名称)我只想返回有效名称。所以IF val DOES NOT CONTAIN A NUMBER AND IS NOT BLANK (OR JUST WHITESPACE) 注意这些列被标记为“NOT NULL”。所以我无法检查空值。
    • 注意:我重新评估了范围,您的回答是正确的。
    • 好的,所以 WHERE colA LIKE "" 用于删除空白单元格(不为空)
    • 这项工作很好WHERE colA not REGEXP '^[0-9]+';
    【解决方案2】:

    MySQL 大部分情况下不支持\whatever 类型的转义。如果你想要空格,你需要使用[[:space:]],这是 POSIX 语法。详情请咨询regex man page here

    【讨论】:

      【解决方案3】:

      id 建议使用 negate 代替:not regexp '[0-9[:space:]]'

      SELECT * FROM table_name WHERE colA NOT REGEXP '[0-9[:space:]]' AND colB NOT REGEXP '[0-9[:space:]]'
      

      【讨论】:

        【解决方案4】:

        您可以尝试的另一个正则表达式如下:regexp '[^0-9\s]'

        【讨论】:

          【解决方案5】:

          未测试,但可以尝试一下

          regexp '^[^0-9 ]+$'
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-03-11
            • 1970-01-01
            • 1970-01-01
            • 2016-01-03
            • 2013-10-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多