0

名前に含まれる 3 つ以上の a または e に一致する正規表現のように見えないという問題がいくつかあります。

名前に 3 文字以上の「a」または「e」(大文字と小文字の両方) を含む従業員を管理するすべてのマネージャーを検索します。たとえば、名前に 2 つの 'a' と 1 つの 'e' があると、選択基準が満たされます。

select manager_name
  from manages
 where regexp_like(employee_name, '[a,e]{3, }');

これを行うと、「e」または「a」を含む適切なリストが表示されますが、3 つ以上を実行しようとすると、空白のセットが返されます。また、以下にサンプル データを示します。

select manager_name
  from manages
 where regexp_like(employee_name, '[a,e]');

サンプルデータ

William Gates III
Lakshmi Mittal
Ingvar Kamprad
Lawrence Ellison
Mark Zuckerberg
Sheryl Sandberg
Liliane Bettencourt
Michael Dell
4

3 に答える 3

0

REGEXP_COUNT()の代わりに使用してみてくださいREGEXP_LIKE():

SELECT manager_name
  FROM manages
 WHERE REGEXP_COUNT(employee_name, '[ae]', 1, 'i') >= 3;

の 3 番目のパラメーターの値はREGEXP_COUNT()、検索を開始する位置 (この場合は先頭から開始する) をmatch_parameter 'i'示し、 は検索で大文字と小文字を区別しないことを示します。

REGEXP_COUNT()Oracle 11g で追加されました。以前のエディションの Oracle を使用している場合は、次のことを試すことができます。

SELECT manager_name
  FROM manages
 WHERE REGEXP_INSTR(employee_name, '[ae]', 1, 3, 0, 'i') > 0;

上記の 4 番目のパラメーター ( 3) は、正規表現の出現回数です。

また:

SELECT manager_name
  FROM manages
 WHERE REGEXP_SUBSTR(employee_name, '[ae]', 1, 3, 'i') IS NOT NULL;

いずれにしても、正規表現を使用する場合よりも単純になりますREGEXP_LIKE()

于 2016-02-12T22:10:59.210 に答える