2012-03-07 64 views
20

其他角色,我想创建一个查询,我选择其中包含不AZ或az字符的所有记录的Oracle SQL - REGEXP_LIKE包含除AZ或az

所以像这样

SELECT * FROM mytable WHERE REGEXP_LIKE(column_1, '![A-Z] [a-z]')

+1

IIRC,尝试'NOT REGEXP_LIKE()',虽然这对MySQL。 – Bojangles 2012-03-07 15:55:12

+1

@JamWaffles如果我明白了,OP是寻找包含任何非字母字符的结果。所以'NOT'只会返回包含_no_字母字符的行。 – 2012-03-07 15:59:44

+1

@迈克尔哎呀!感谢您注意到这一点。我现在感觉很傻。 – Bojangles 2012-03-07 16:01:31

回答

33

^否定字符类:

SELECT * FROM mytable WHERE REGEXP_LIKE(column_1, '[^A-Za-z]') 
+0

当我们运行时,我们会返回诸如“AB Future”之类的记录。我们做错了什么?运行相同的查询如上... FYI有开一个类似的问题在http://stackoverflow.com/questions/30948012/oracle-query-to-find-string-not-containing-characters – 2015-06-22 13:41:57

+1

@Marcus模式看除上/下字母之外的_any_字符,以及单个空格匹配。它不强制该字符串包含_only_非字母。如果你必须确保_no_非字母字符匹配,锚一样'^ [^ A-ZA-Z] + $'正则表达式 - 我认为这是你的要求。由于空间的原因,锚定图案不应该匹配。 – 2015-06-22 13:43:40

+0

基本上我希望找到具有字符的字符串_other_比包括AZ,az随着用户互动,增加人物,如0-9,',','-'等 – 2015-06-22 13:48:52

9

喜欢的东西

select * 
    from foo 
where regexp_like(col1, '[^[:alpha:]]') ; 

应该工作

SQL> create table foo(col1 varchar2(100)); 

Table created. 

SQL> insert into foo values('abc'); 

1 row created. 

SQL> insert into foo values('abc123'); 

1 row created. 

SQL> insert into foo values('def'); 

1 row created. 

SQL> select * 
    2 from foo 
    3 where regexp_like(col1, '[^[:alpha:]]') ; 

COL1 
-------------------------------------------------------------------------------- 
abc123 
相关问题