Oracle SQL在哪里regexp_like而不是喜欢

时间:2012-07-23 10:33:11

标签: sql oracle oracle-sqldeveloper

我想查询一个表格,我正在与正则表达式进行比较,然后我想过滤掉任何以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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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,说问题出在其他地方