1

我想查询一个我正在与正则表达式进行比较的表,然后在这些结果中我想过滤掉任何以 999 开头的结果

这是我的查询,但这没有返回结果:

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
4

2 回答 2

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

这是一个 SQL Fiddle 来证明它

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

于 2012-07-23T10:41:05.820 回答
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 的回答,说问题出在其他地方

于 2012-07-23T10:49:07.383 回答