2013-10-20 177 views
1

這真的開始傷害了!在Oracle正則表達式查詢中轉義單引號

我試圖用一個正則表達式條件

我的目標是找到包含不常用包含在名稱(非字母,空格,連字符和單引號charachters所有姓氏寫在Oracle開發人員查詢)

即 我需要找到

J00ls 
McDonald "Macca" 
Smithy (Smith) 

和NOT發現

Smith 
Mckenzie-Smith 
El Hassan 
O'Dowd 

我現在查詢是

select * from dm_name 
WHERE regexp_like(last_name, '([^A-Za-z -])') 
and batch_id = 'ATEST'; 

它排除一切有望除了單引號。當提到單引號字符時,Oracvel SQL Develoepr解析器將其視爲文字。

我已經試過:

\' -- but got a "missing right parenthesis" error 
||chr(39)|| -- but the search returned nothing 
'' -- negated the previous character in the matching group e.g. '([^A-Za-z -''])' made names with '-' return. 

我會很感激任何你能提供的。

回答

2

以下工作:

select * 
    from dm_name 
    WHERE regexp_like(last_name, '([^A-Za-z ''-])'); 

See this SQLFiddle

無論SQL Developer是否喜歡它,都是我無法證實的,因爲我沒有安裝該產品。

分享和享受。

3

只需加倍單引號以避免您的報價。

所以

select * 
    from dm_name 
where regexp_like(last_name, '[^A-Za-z ''-]') 
    and batch_id = 'ATEST' 

另見本sqlfiddle。請注意,我在SQL開發人員中嘗試了一個類似的查詢,並且工作和小提琴一樣。

還要注意,這個工作的-人物都有否則它試圖找到該組SPACE',而不是字符-是該組中的最後一個字符。