2015-10-15 30 views
0

我想獲取所有名稱中包含特殊字符和數字的名稱。我想知道是否有更好的寫這個查詢的方法。由於查詢正則表達式 - oracle數據庫

select Name from TABLE1 
WHERE NAME LIKE '%-%' 
    OR NAME LIKE '%$%' 
    OR NAME LIKE '%4%' etc 
+1

mysql OR oracle not both – Mihai

+0

如前所述,使用了標籤dbms,因爲答案將是產品特定的! – jarlh

+0

是mysql嗎?還是oracle? – Alex

回答

0

試試這個:

SELECT Name FROM Test WHERE REGEXP_LIKE(Name,'(-|$|4)'); 

的| (OR或Alternation)運算符允許表達式在值包含' - '或'$'或'4'時返回true。

+0

您的意思是,'regexp_like'? –

+0

您可以做SELECT名稱FROM TABLE1姓名REGEXP_LIKE(NAME,'( - | $ | 4)') –

+0

您的匹配模式中的字符列表不會與'like'運算符一起使用。你試過了嗎? –

0

使用方括號來定義字符類。此外,還有一個完整的正則表達式,用於將模式錨定到字符串的開頭,字符類之前的任意數量的任何字符,包括短劃線或4或美元符號,然後是錨定到字符串末尾的任意數量的任何字符:

SQL> with tbl(name) as (
    2 select 'efs' from dual 
    3 union 
    4 select 'abc-' from dual 
    5 union 
    6 select 'a4bd' from dual 
    7 union 
    8 select 'gh$dll' from dual 
    9 union 
10 select 'xy5zzy' from dual 
11 ) 
12 select name from tbl 
13 where regexp_like(name, '^.*[-|$|4].*$'); 

NAME 
------ 
a4bd 
abc- 
gh$dll 

SQL>