2009-09-24 87 views
36

我想选择使用包含在MySQL中只包含字母数字字符的所有行字母数字字符的行:仅选择包含在MySQL

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

然而,它的返回任先生所有行,他们包含非字母数字字符。

回答

64

试试这个代码:

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

这可以确保所有字符匹配。

+0

欧凯它做得好,但它不显示空间包括数据字段。如何通过此查询获取包括数据字段的空间。 – 2013-07-27 07:14:38

+2

@ Md.MahabuburRahman:'9'和']'之间的所有空白:''^ [A-Za-z0-9] + $'' – 2013-07-29 07:40:10

+0

是否是正则表达式有效?我记得在最后一个字符上用isnumeric做这个。这很有趣。从BIRT \t其中ISNUMERIC(RIGHT(名称,1))= 1 – chungtinhlakho 2016-06-03 01:18:52

3

试试这个:

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

由于正则表达式不区分除了二进制领域的敏感。

6

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

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

^$需要整个字符串相匹配,而不是只是它的任何部分,并+查找1个以上 alphanumberic字符。

你也可以使用一个命名字符类,如果你喜欢:

SELECT * FROM table WHERE column REGEXP '^[[:alnum:]]+$'; 
-5

更改REGEXPLike

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

这一个正常工作

0

也有这样的:

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

它选择包含您想要的列中的字符的行(在示例中为m,但您可以更改)。

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

-1

试试这个

select count(*) from table where cast(col as double) is null; 
+0

如果'col'是'ABC'',这会如何工作? – ebyrob 2016-11-09 16:08:41