2013-10-07 47 views
2

如何查詢含有Names的人的列以獲取僅包含的名稱2「a」在字符串中完全匹配2個字符 - SQL

我熟悉與LIKE使用但發現所有的名字,即使1 a,當我寫%a%符號,但我需要找到只有那些有正好 2個字符。

請解釋 - 在此先感謝

表名: 「人物」

列名稱: 「姓名,年齡,性別」

回答

4

使用'_a''_'是一個單字符通配符,其中'%'匹配0個或更多字符。

如果您需要更高級的匹配項,請使用正則表達式,使用REGEXP_LIKE。請參閱Using Regular Expressions With Oracle Database

當然你也可以使用其他技巧。例如,您可以將字符串的長度與相同字符串的長度進行比較,但將'a'從中刪除。如果差值是2,那麼字符串包含兩個'a'。但是,正如你所看到的,事情很快就會變得很難看,因爲當一個字符串爲空時,length會返回'null',所以如果你想檢查名字是否是'aa',你必須爲此做個例外。

select * from People 
where 
    length(Names) - 2 = nvl(length(replace(Names, 'a', '')), 0) 
+1

非常感謝。它的工作:)我不知道'nvl'的使用,因爲我是新來的SQL。我想如果你+1這個問題以及正弦可能會幫助許多其他人在相同的情況下觸發 - Thankyou –

+0

完成。 :)請注意,'nvl'是Oracle的一項發明,對於SQL並不常見。其他數據庫如SQL服務器使用'isnull'。一個更便攜的選擇是'coalesce',但它有更多的字母,拼寫更難。 ;-) – GolezTrol

4

假如你問了兩個a字符搜索字符串兩個的,但不是三個。

select * 
    from people 
where names like '%a%a%' 
    and name not like '%a%a%a%' 
+0

Thankyou-竅門工作以及:) 先生,我想如果你+1這個問題,以及正弦它可能會幫助許多其他人在同一情況下觸發 - 謝謝 –

1

另一種解決辦法是更換所有不與任何一個a和檢查結果字符串是長恰好兩個字符:

select names 
from people 
where length(regexp_replace(names, '[^a]', '')) = 2; 

這也可以擴展到處理大寫A小號:

select names 
from people 
where length(regexp_replace(names, '[^aA]', '')) = 2; 

SQLFiddle例如:http://sqlfiddle.com/#!4/09bc6

-1

select * from People where names like '__';也會工作

+0

歡迎來到StackOverFlow隊友,你的問題回答已經有很多答案,其中一個也被接受。所以如果你不能在你的答案中添加更多的內容,請不要重複答案。首先檢查你是否有新的東西和工作,或者在發佈你的答案之前重複別人的回答。 – Chirag