2012-07-23 40 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,稱該問題是在其他地方

相關問題