2012-03-07 129 views
20

其他角色,我想創建一個查詢,我選擇其中包含不AZ或az字符的所有記錄的Oracle SQL - REGEXP_LIKE包含除AZ或az

所以像這樣

SELECT * FROM mytable WHERE REGEXP_LIKE(column_1, '![A-Z] [a-z]')

+1

IIRC,嘗試'NOT REGEXP_LIKE()',雖然這對MySQL。 – Bojangles 2012-03-07 15:55:12

+1

@JamWaffles如果我明白了,OP是尋找包含任何非字母字符的結果。所以'NOT'只會返回包含_no_字母字符的行。 – 2012-03-07 15:59:44

+1

@邁克爾哎呀!感謝您注意到這一點。我現在感覺很傻。 – Bojangles 2012-03-07 16:01:31

回答

33

^否定字符類:

SELECT * FROM mytable WHERE REGEXP_LIKE(column_1, '[^A-Za-z]') 
+0

當我們運行時,我們會返回諸如「AB Future」之類的記錄。我們做錯了什麼?運行相同的查詢如上... FYI有開一個類似的問題在http://stackoverflow.com/questions/30948012/oracle-query-to-find-string-not-containing-characters – 2015-06-22 13:41:57

+1

@Marcus模式看除上/下字母之外的_any_字符,以及單個空格匹配。它不強制該字符串包含_only_非字母。如果你必須確保_no_非字母字符匹配,錨一樣'^ [^ A-ZA-Z] + $'正則表達式 - 我認爲這是你的要求。由於空間的原因,錨定圖案不應該匹配。 – 2015-06-22 13:43:40

+0

基本上我希望找到具有字符的字符串_other_比包括AZ,az隨着用戶互動,增加人物,如0-9,',','-'等 – 2015-06-22 13:48:52

9

喜歡的東西

select * 
    from foo 
where regexp_like(col1, '[^[:alpha:]]') ; 

應該工作

SQL> create table foo(col1 varchar2(100)); 

Table created. 

SQL> insert into foo values('abc'); 

1 row created. 

SQL> insert into foo values('abc123'); 

1 row created. 

SQL> insert into foo values('def'); 

1 row created. 

SQL> select * 
    2 from foo 
    3 where regexp_like(col1, '[^[:alpha:]]') ; 

COL1 
-------------------------------------------------------------------------------- 
abc123 
相關問題