您不需要使用正則表達式來執行此操作。你只可以使用普通SUBSTR
和INSTR
獲得從開始的子到第一/
:
WITH your_table AS (
SELECT 'procedure1/loc1/p1' procedure_name FROM dual
UNION
SELECT 'proc2/loc1/p2/c1' procedure_name FROM dual
UNION
SELECT 'proc1/loc2/p2/c2' procedure_name FROM dual
UNION
SELECT 'procedure3/loc1/p1' procedure_name FROM dual
UNION
SELECT 'procedure4/loc3/p1' procedure_name FROM dual
)
SELECT *
FROM your_table
WHERE SUBSTR(procedure_name,1,INSTR(procedure_name,'/')-1) IN ('proc1','procedure4');
但是,如果你想了解在Oracle使用正則表達式。您可以使用REGEXP_SUBSTR
這樣的:
WITH your_table AS (
SELECT 'procedure1/loc1/p1' procedure_name FROM dual
UNION
SELECT 'proc2/loc1/p2/c1' procedure_name FROM dual
UNION
SELECT 'proc1/loc2/p2/c2' procedure_name FROM dual
UNION
SELECT 'procedure3/loc1/p1' procedure_name FROM dual
UNION
SELECT 'procedure4/loc3/p1' procedure_name FROM dual
)
SELECT *
FROM your_table
WHERE REGEXP_SUBSTR(procedure_name,'^(.+?)/',1,1,'i',1) IN ('proc1','procedure4');
最後一個參數告訴Oracle返回匹配的模式()。
前面已經提到的,你也可以使用REGEXP_LIKE
:
WITH your_table AS (
SELECT 'procedure1/loc1/p1' procedure_name FROM dual
UNION
SELECT 'proc2/loc1/p2/c1' procedure_name FROM dual
UNION
SELECT 'proc1/loc2/p2/c2' procedure_name FROM dual
UNION
SELECT 'procedure3/loc1/p1' procedure_name FROM dual
UNION
SELECT 'procedure4/loc3/p1' procedure_name FROM dual
)
SELECT *
FROM your_table
WHERE REGEXP_LIKE(procedure_name,'^(proc1|procedure4)/');
將'PROC1'更改爲'proc1'。和你的查詢應該工作。 –
@ArkadiuszŁukasiewicz錯字錯誤,它的低位字母 – Moudiz