varchar に含まれる母音の数を取得しようとしていますが、Google で調べてみましたが、成功しませんでした。
誰か私に手を貸してくれませんか?
何かのようなもの
select length(regexp_replace('andrew','[^AEIOUaeiou]')) as vowels from dual;
Oracle 11g を使用している場合は、REXEXP_COUNT関数を使用して、パターンに一致するものを判別できます。
SQL> select regexp_count('andrew', '[aeiou]', 1, 'i') as vowels
2 from dual;
VOWELS
----------
2
最初のパラメーターは、一致させたい文字列です'andrew'
。
2 番目のパラメータは一致パターンで、この場合は[aeiou]
. は[]
文字リストを示します。パーサーは、このリスト内のすべての文字を任意の順序で照合します。
3 番目のパラメータ は1
、Oracle が一致の検索を開始する文字列の位置インデックスを示す開始位置です。これは単独で含まれているため、4 番目のパラメーターを使用できます。
4 番目のパラメーターは一致パラメーターで、'i'
大文字と小文字を区別しない一致を行うことを示します。これが、キャラクターリストが存在しない 理由[aeiouAEIOU]
です。
10g を使用している場合、REGEXP_COUNT は存在しません。この場合、 REGEXP_REPLACE を使用してAnnjawanのソリューションのより正確なバージョンを使用できます。
SQL> select length(regexp_replace('andrew','[^aeiou]', '', 1, 0, 'i')) as vowels
2 from dual;
VOWELS
----------
2
カラット ( ) は、not を示します。つまり、文字リストにない文字列内のすべての文字を空の文字列^
に置き換えます。次のパラメータも開始位置です。5 番目のパラメーターは、一致するすべてのパターンを置換することを示します。ここでも match パラメーターを使用して、大文字と小文字を区別しない一致を示しています。'andrew'
[aeiou]
0
'i'
Gaurav の答えは正しくありません。これは、文字リスト内にコンマが含まれているためです。利用可能な場合、文字リスト内のすべてが一致することに注意してください。したがって、文字列にコンマを導入すると、文字列に 3 つの「母音」が含まれます。
SQL> select regexp_count('an,drew','[a,e,i,o,u,A,E,I,O,U]' ) as vowels
2 from dual;
VOWELS
----------
3
正規表現は単純な獣ではありません。正規表現を試すときはドキュメントを読むことを強くお勧めします。
SELECT length('andrew')
- length(REGEXP_REPLACE('andrew','[a,e,i,o,u,A,E,I,O,U]',''))
FROM DUAL;
Output:2 -- a
ande
はここで 2 つの母音です。
Oracle 11g を使用している場合
SELECT REGEXP_COUNT('andrew','[a,e,i,o,u,A,E,I,O,U]' ) from dual