如何查詢含有Names
的人的列以獲取僅包含的名稱2「a」
?在字符串中完全匹配2個字符 - SQL
我熟悉與LIKE
使用但發現所有的名字,即使1 a
,當我寫%a
%
符號,但我需要找到只有那些有正好 2個字符。
請解釋 - 在此先感謝
表名: 「人物」
列名稱: 「姓名,年齡,性別」
如何查詢含有Names
的人的列以獲取僅包含的名稱2「a」
?在字符串中完全匹配2個字符 - SQL
我熟悉與LIKE
使用但發現所有的名字,即使1 a
,當我寫%a
%
符號,但我需要找到只有那些有正好 2個字符。
請解釋 - 在此先感謝
表名: 「人物」
列名稱: 「姓名,年齡,性別」
使用'_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)
假如你問了兩個a
字符搜索字符串兩個的,但不是三個。
select *
from people
where names like '%a%a%'
and name not like '%a%a%a%'
Thankyou-竅門工作以及:) 先生,我想如果你+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
select * from People where names like '__';
也會工作
歡迎來到StackOverFlow隊友,你的問題回答已經有很多答案,其中一個也被接受。所以如果你不能在你的答案中添加更多的內容,請不要重複答案。首先檢查你是否有新的東西和工作,或者在發佈你的答案之前重複別人的回答。 – Chirag
非常感謝。它的工作:)我不知道'nvl'的使用,因爲我是新來的SQL。我想如果你+1這個問題以及正弦可能會幫助許多其他人在相同的情況下觸發 - Thankyou –
完成。 :)請注意,'nvl'是Oracle的一項發明,對於SQL並不常見。其他數據庫如SQL服務器使用'isnull'。一個更便攜的選擇是'coalesce',但它有更多的字母,拼寫更難。 ;-) – GolezTrol