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

REGEXP_SUBSTR() Funkcja w Oracle

W Oracle REGEXP_SUBSTR() funkcja zwraca podciąg z ciągu na podstawie wzorca wyrażenia regularnego.

Rozszerza funkcjonalność SUBSTR() funkcji, pozwalając nam na użycie wzorców wyrażeń regularnych.

Składnia

Składnia wygląda tak:

REGEXP_SUBSTR ( source_char, pattern
                [, position
                   [, occurrence
                      [, match_param
                         [, subexpr ]
                      ]
                   ]
                ]
              )

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.
  • occurrence jest nieujemną liczbą całkowitą, która określa, które wystąpienie ma zostać wyszukane. Wartość domyślna to 1 , co oznacza wyszukiwanie pierwszego wystąpienia.
  • 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. Ten argument działa tak samo, jak w przypadku użycia z REGEXP_COUNT() funkcjonować. Zobacz dokumentację Oracle dotyczącą tej funkcji, aby uzyskać więcej informacji.
  • Dla pattern z wyrażeniami podrzędnymi, subexpr jest nieujemną liczbą całkowitą od 0 do 9 wskazującą, które podwyrażenie we pattern ma być zwrócona przez funkcję. Ten argument działa tak samo, jak używany z REGEXP_INSTR() funkcjonować. Więcej informacji na temat tej funkcji można znaleźć w dokumentacji Oracle.

Przykład

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

SELECT 
    REGEXP_SUBSTR('Cats and dogs', 'd.g')
FROM DUAL;

Wynik:

dog

W tym przypadku występuje dopasowanie i zwracany jest pierwszy (i w tym przypadku jedyny) pasujący podciąg.

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_SUBSTR() skutecznie, będziesz musiał znać właściwy wzór, aby uzyskać pożądany efekt.

Brak dopasowania

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

SET NULL 'null';
SELECT REGEXP_SUBSTR('My dogs like dregs', 't.g')
FROM DUAL;

Wynik:

null

Brak dopasowania, więc null jest zwracany.

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ć.

Wiele meczów

Oto przykład z wieloma dopasowaniami:

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

Wynik:

dog

W razie potrzeby możesz jednak określić, które wystąpienie ma zostać zastąpione:

SELECT 
REGEXP_SUBSTR('My dogs have dags', 'd.g', 1, 2)
FROM DUAL;

Wynik:

dag

Zauważ, że dodałem tutaj dwa argumenty; 1 i 2 . 1 określa miejsce pobytu w ciągu, aby rozpocząć wyszukiwanie (w tym przypadku od pierwszego znaku). 2 określa, które wystąpienie ma zostać wyszukane. W takim przypadku wyszukiwane jest drugie wystąpienie.

Oto, co się stanie, jeśli rozpocznę wyszukiwanie po pierwszym wystąpieniu:

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

Wynik:

null

W tym przypadku nie ma dopasowania, ponieważ po pozycji wyjściowej występuje tylko jeden przypadek.

Jeśli zmienię ostatni argument na 1 , otrzymujemy dopasowanie (ponieważ jest to pierwsze wystąpienie po określonej pozycji startowej):

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

Wynik:

dag

Wrażliwość na wielkość liter

REGEXP_SUBSTR() Funkcja jest zgodna z regułami określania i wyprowadzania 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 piątego 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_SUBSTR('My Cats', 'c.t', 1, 1) AS "Default",
    REGEXP_SUBSTR('My Cats', 'c.t', 1, 1, 'i') AS "Case Insensitive",
    REGEXP_SUBSTR('My Cats', 'c.t', 1, 1, 'c') AS "Case Sensitive"
FROM DUAL;

Wynik:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
null       Cat                 null             

Na podstawie tych wyników moje zestawienie wydaje się uwzględniać wielkość liter. Pozostałe dwa ciągi zostały zmuszone do dopasowania odpowiednio bez rozróżniania i rozróżniania wielkości liter.

Wyrażenia podrzędne

Oto przykład użycia szóstego argumentu do zwrócenia określonego wzorca podwyrażenia:

SELECT REGEXP_SUBSTR(
    'catdogcow', 
    '(c.t)(d.g)(c.w)', 
    1, 1, 'i', 1
    )
FROM DUAL;

Wynik:

cat

W tym przypadku zwróciłem pierwsze podwyrażenie.

Oto, co się stanie, jeśli określę trzecie podwyrażenie:

SELECT REGEXP_SUBSTR(
    'catdogcow', 
    '(c.t)(d.g)(c.w)', 
    1, 1, 'i', 3
    )
FROM DUAL;

Wynik:

cow

Argumenty zerowe

Jeśli jakikolwiek argument ma wartość null , wynik to null :

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

Wynik:

      1       2       3       4       5       6 
_______ _______ _______ _______ _______ _______ 
null    null    null    null    null    null   

Niewłaściwa liczba argumentów

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

SELECT REGEXP_SUBSTR()
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT REGEXP_SUBSTR()
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_SUBSTR('Cat', 'c.t', 1, 1, 'i', 1, 'oops')
FROM DUAL;

Wynik:

Error starting at line : 1 in command -
SELECT REGEXP_SUBSTR('Cat', 'c.t', 1, 1, 'i', 1, '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_SUBSTR() 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.

Zobacz dokumentację Oracle, aby uzyskać więcej informacji i przykładów REGEXP_SUBSTR() 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. Ustawienie wyższego rozmiaru pobieranych wierszy Oracle powoduje spowolnienie mojej aplikacji?

  2. Błąd ORA-12514 po ponownym uruchomieniu serwera

  3. Domyślne zachowanie automatycznego zatwierdzania połączenia JDBC

  4. problem ze znalezieniem listy plików w katalogu

  5. LISTAGG Query ORA-00937:nie jest to funkcja pojedynczej grupy