2014-04-12 20 views
2

我有一些產品表(Oracle數據庫):如何從oracle的正則表達式中排除單詞?

product_1 150 
product_2 250 
product_1 test 150 
product_3 
... etc 

我想取數據只爲「product_1」而不是「product_1測試」與只有一個條件。我使用REGEXP_LIKE:

SELECT * 
FROM TABLENAME 
WHERE REGEXP_LIKE(LOWER(PRODUCT), '.*product_1.*(?!test).*') 

但它不起作用並返回空結果。正則表達式的語法錯誤在哪裏?

+0

看起來像你的需要'。* product_1 \ s + [0-9] +' –

+0

@GrijeshChauhan什麼是正則表達式中的數字? :)並在哪裏排除字?.. –

+0

沒有得到你...我的評論的正則表達式不起作用?它應該 –

回答

1

Oracle不支持lookahead。 隨着產品爲你展示,你可以使用這個:

SELECT * FROM TABLENAME WHERE REGEXP_LIKE(PRODUCT, 'product_\d+(\s*\d+)*', 'c'); 

這只是根據您所顯示的產品名稱。如果它沒有抓住你想要的一切,給我們一個更好的想法,我們正在努力匹配。

另一種選擇:這是一個黑客,但如果你有信心,「product_digits」不應該跟着一個「T」,您可以使用此:

SELECT * FROM TABLENAME WHERE REGEXP_LIKE(PRODUCT, 'product_\d+($|\s)($|[^t]).*', 'c'); 
0

只有一個條件:

SELECT * 
FROM TABLENAME 
WHERE 
    REGEXP_INSTR(LOWER(PRODUCT), 'product_1\s') 
    > REGEXP_INSTR(LOWER(PRODUCT), 'product_1\s+test')