3
4

4 に答える 4

7

2 つの文字を要求していると仮定するとa、a が 2 つあるが 3 つない文字列を検索します。

select *
  from people
 where names like '%a%a%'
   and name not like '%a%a%a%'
于 2013-10-07T20:33:23.200 に答える
4

を使用し'_a'ます。0 個以上の文字'_'に一致する 1 文字のワイルドカードです。'%'

より高度な一致が必要な場合は、REGEXP_LIKE. Oracle Databaseでの正規表現の使用を参照してください。

もちろん、他のトリックも使用できます。たとえば、文字列の長さを同じ文字列の長さと比較できますが、'a' は削除されています。差が 2 の場合、文字列には 2 つの 'a' が含まれています。ただし、文字列が空の場合、長さは「null」を返すため、すぐに見苦しくなります。そのため、正確に「aa」である名前を確認したい場合は、例外を作成する必要があります。

select * from People
where
  length(Names) - 2 = nvl(length(replace(Names, 'a', '')), 0)
于 2013-10-07T20:32:37.717 に答える
1

もう 1 つの解決策は、 ではないすべてのものを何も置き換えずa、結果の文字列が正確に 2 文字の長さであるかどうかを確認することです。

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

これを拡張して、大文字Aの sを処理することもできます。

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

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

于 2013-10-07T20:39:46.047 に答える