2011-08-08 25 views
3

我试图返回只有那些可乐COLB不包含数字或空格MySQL的REGEXP无空白字符没有数字

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

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 

我假设我的问题是我的正则表达式...任何帮助吗?

回答

4

嗯,你的表达不起作用,因为33是数字和你正在寻找任何非小数,非空白字符。所以它不包含结果中的那一行。

尝试:

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

ETA:是啊,忘了\什么不起作用

+0

好了,所以我将如何再筛选出任何包含了许多..和“只是一个空间”。基本上我有一个数据导入,其中包含很多无效值。 (包含数字的名称,或者完全丢失)我只想返回有效的名称。所以'如果val不包含数字并且不是空格(或者只是WHITESPACE)'请注意标记为'NOT NULL'的列。所以我无法检查一个空值。 – rlemon

+0

注意:我重新评估了范围,您对这个答案是正确的。 – rlemon

+0

好的,所以colA LIKE“”用于删除空白单元格(它们不为空) – rlemon

0

未经测试,但给它一个尝试

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

ID建议使用否定来代替:not regexp '[0-9[:space:]]'

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

MySQL不支持\whatever类型大部分逃脱。如果你想要空格,你需要使用[[:space:]],这是POSIX语法。有关regex man page here的详细信息。

1

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

相关问题