9780 次
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 に答える