Oracle
 sql >> Baza danych >  >> RDS >> Oracle

REGEXP_COUNT() Funkcja w Oracle

W Oracle REGEXP_COUNT() funkcja zwraca liczbę wystąpień wzorca w ciągu źródłowym.

Składnia

Składnia wygląda tak:

REGEXP_COUNT (source_char, pattern [, position [, match_param]])

Gdzie:

  • source_char to wyrażenie znakowe, które służy jako wartość wyszukiwania.
  • pattern jest wyrażeniem regularnym.
  • position jest dodatnią liczbą całkowitą, która określa, gdzie rozpocząć wyszukiwanie. Wartość domyślna to 1 , czyli rozpocznij wyszukiwanie od pierwszego znaku.
  • match_param pozwala zmienić domyślne zachowanie dopasowania funkcji. Na przykład pozwala określić wielkość liter, sposób obsługi wielu linii i spacji itp.

Przykład

Oto podstawowy przykład użycia REGEXP_COUNT() w Oracle:

SELECT 
    REGEXP_COUNT('My dog drinks beer', 'd.g')
FROM DUAL;

Wynik:

1

W tym przypadku jest jeden mecz.

Wyrażenia regularne mogą mieć bardzo duże możliwości, a w tym przykładzie użyto bardzo prostego przykładu. Aby użyć REGEXP_COUNT() skutecznie, będziesz musiał znać właściwy wzór, aby uzyskać pożądany efekt. Przykłady na tej stronie skupiają się na REGEXP_COUNT() funkcji, a nie na wyrażeniach regularnych.

Brak dopasowania

Oto przykład, w którym nie ma dopasowania:

SELECT REGEXP_COUNT('My dogs like dregs', 't.g')
FROM DUAL;

Wynik:

0

Brak dopasowania, więc 0 jest zwracany.

Wiele meczów

Oto przykład z wieloma dopasowaniami:

SELECT 
    REGEXP_COUNT('My dogs have dags', 'd.g')
FROM DUAL;

Wynik:

2

W tym przypadku są dwa dopasowania.

Pozycja początkowa

Możesz określić pozycję początkową:

SELECT 
REGEXP_COUNT('My dogs have dags', 'd.g', 8)
FROM DUAL;

Wynik:

1

Więc tutaj mamy tylko jeden mecz. Dzieje się tak, ponieważ wyszukiwanie rozpoczyna się dopiero po pierwszym wystąpieniu (pozycja 8).

Wrażliwość na wielkość liter

REGEXP_COUNT() Funkcja jest zgodna z regułami określania sortowania Oracle, które definiują sortowanie, które ma być używane podczas dopasowywania ciągu do wzorca.

Można jednak jawnie określić rozróżnianie wielkości liter za pomocą opcjonalnego czwartego argumentu. Gdy to zrobisz, zastępuje to rozróżnianie wielkości liter lub akcentu w określonym zestawieniu.

Możesz określić i dla dopasowania bez rozróżniania wielkości liter i c do dopasowywania z uwzględnieniem wielkości liter.

Oto przykład:

SELECT 
    REGEXP_COUNT('My Cats', 'c.t', 1) AS "Default",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'i') AS "Case Insensitive",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'c') AS "Case Sensitive"
FROM DUAL;

Wynik:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   1                 0

Tutaj w moim zestawieniu rozróżniana jest wielkość liter. Pozostałe dwa ciągi zostały zmuszone do dopasowania odpowiednio bez rozróżniania i rozróżniania wielkości liter.

Argumenty zerowe

Z wyjątkiem czwartego argumentu, podając null dla argumentu daje wynik null :

SET NULL 'null';
SELECT 
    REGEXP_COUNT(null, 'c.t', 1, 'i') AS "1",
    REGEXP_COUNT('Cat', null, 1, 'i') AS "2",
    REGEXP_COUNT('Cat', 'c.t', null, 'i') AS "3",
    REGEXP_COUNT('Cat', 'c.t', 1, null) AS "4"
FROM DUAL;

Wynik:

      1       2       3    4 
_______ _______ _______ ____ 
   null    null    null    0

Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null występuje w wyniku polecenia SQL SELECT oświadczenie.

Możesz jednak użyć SET NULL aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null należy zwrócić.

Niewłaściwa liczba argumentów

Przekazanie funkcji bez argumentów lub za mało, skutkuje błędem:

SELECT REGEXP_COUNT()
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT REGEXP_COUNT()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

To samo dotyczy sytuacji, gdy przekazujemy zbyt wiele argumentów:

SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

Więcej informacji

REGEXP_COUNT() funkcja (jak również inna implementacja wyrażeń regularnych Oracle) jest zgodna ze standardem wyrażeń regularnych IEEE Portable Operating System Interface (POSIX) oraz z wytycznymi Unicode dotyczącymi wyrażeń regularnych Unicode Consortium.

Więcej informacji i przykłady funkcji REGEXP_COUNT() można znaleźć w dokumentacji Oracle funkcja.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sformatować liczbę z przecinkiem w Oracle

  2. Jak uzyskać aktualną datę w Oracle

  3. Nadmiarowość N+1 i konsolidacja serwerów

  4. Określanie lokalizacji odpowiedniego pliku tnsnames.ora

  5. Nie można zweryfikować, z opcją walidacji