2012-07-23 43 views
1

我想,来查询我对正则表达式进行比较,然后对这些结果我想筛选出任何与999的Oracle SQL其中REGEXP_LIKE,而不是像

开始这里的查询我有一个表,但是这不会返回任何结果:

Select * FROM my_table 
WHERE REGEXP_LIKE(my_row, '[a-zA-Z]') 
AND my_row NOT LIKE '999%' 

任何想法,我错了吗?我知道我应该得到几个结果。

采样日期会像下面...

my_row 
______ 

12345 
45673 
G12354 
1234B 
999RT 
+0

查询看起来是正确的给我。你能提供一些来自'my_table'的实际样本数据吗? – 2012-07-23 10:40:28

回答

4

鉴于这种测试数据:

create table my_table (id number, my_row varchar2(10)); 

insert into my_table values (1, '7878') 
/
insert into my_table values (2, 'THIS') 
/
insert into my_table values (3, 'and this') 
/
insert into my_table values (4, '999NOTthis') 
/

查询返回的结果:

ID  MY_ROW 
--  ------ 
2  THIS 
3  and this 

这里的a SQL Fiddle to prove it

这些似乎是我们希望由您的逻辑返回的行,所以问题显然在您的数据中。

+0

我会给出这个答案,因为你确认我的查询是正确的,这是一个数据问题。事实证明,数据领先空间上的记录(例如'999RT'),所以我不得不先修剪。 – Tom 2012-07-23 10:55:16

1

鉴于你的样本数据,这个查询:

with my_table as (
    select '12345' as my_row from dual union all 
    select '45673'   from dual union all 
    select 'G12354'   from dual union all 
    select '1234B'   from dual union all 
    select '999RT'   from dual 
) 
select * from my_table 
where regexp_like(my_row, '[a-zA-Z]') 
and my_row not like '999%' 

息率

MY_ROW 
------ 
G12354 
1234B 

,所以我可以第二APC's answer,称该问题是在其他地方

相关问题