MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak REGEXP_INSTR() działa w MariaDB

W MariaDB REGEXP_INSTR() funkcja zwraca początkowy indeks podłańcucha, który pasuje do wzorca wyrażenia regularnego.

Indeks zaczyna się od 1 . Jeśli nie ma dopasowania, wynikiem jest 0 .

Składnia

Składnia wygląda tak:

REGEXP_INSTR(subject, pattern)

Gdzie subject jest ciągiem wejściowym i pattern jest wzorcem wyrażenia regularnego dla podłańcucha.

Zwróć uwagę, że w chwili pisania tego tekstu wersja MariaDB funkcji REGEXP_INSTR() akceptuje mniej argumentów niż REGEXP_INSTR() MySQL . Wersja MySQL pozwala na dostarczenie argumentów dla pozycji początkowej wyszukiwania, jakiego wystąpienia szukać, jakiego typu pozycji zwrócić, a także w sposób doprecyzowania wyrażenia regularnego.

Przykład

Oto podstawowy przykład:

SELECT REGEXP_INSTR('Cat', 'at');

Wynik:

+---------------------------+
| REGEXP_INSTR('Cat', 'at') |
+---------------------------+
|                         2 |
+---------------------------+

W tym przypadku występuje dopasowanie, a podciąg zaczyna się na pozycji 2.

Brak dopasowania

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

SELECT REGEXP_INSTR('Cat', '^at');

Wynik:

+----------------------------+
| REGEXP_INSTR('Cat', '^at') |
+----------------------------+
|                          0 |
+----------------------------+

Brak dopasowania, więc wynik to 0 . Nie ma dopasowania, ponieważ określiłem, że ciąg musi zaczynać się od podciągu.

Zmieńmy to tak, aby działa zacznij od tego podciągu:

SELECT REGEXP_INSTR('at', '^at');

Wynik:

+---------------------------+
| REGEXP_INSTR('at', '^at') |
+---------------------------+
|                         1 |
+---------------------------+

Wrażliwość na wielkość liter

REGEXP_INSTR() Funkcja jest zgodna z regułami rozróżniania wielkości liter efektywnego sortowania. Dopasowywanie jest wykonywane bez rozróżniania wielkości liter w przypadku sortowania bez rozróżniania wielkości liter oraz z rozróżnianiem wielkości liter w przypadku sortowania z rozróżnianiem wielkości liter i danych binarnych.

Oto przykład:

SELECT 
    REGEXP_INSTR('Cat', 'c') AS "My Default",
    REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_ci, 'c') AS "Case Insensitive",
    REGEXP_INSTR(_latin7'Cat' COLLATE latin7_general_cs, 'c') AS "Case Sensitive";

Wynik:

+------------+------------------+----------------+
| My Default | Case Insensitive | Case Sensitive |
+------------+------------------+----------------+
|          1 |                1 |              0 |
+------------+------------------+----------------+

Moje domyślne sortowanie nie uwzględnia wielkości liter. Pozostałe dwa ciągi zostały zmuszone do sortowania bez rozróżniania wielkości liter i sortowania z rozróżnianiem wielkości liter.

Zapewnienie BINARY string uwzględnia również wielkość liter (patrz poniżej).

Ciągi binarne

Domyślnie pozycje są mierzone w znakach, a nie w bajtach. Możesz jednak rzutować zestaw znaków wielobajtowych na BINARY aby uzyskać przesunięcia w bajtach, jeśli zajdzie taka potrzeba.

Przykład:

SELECT 
    REGEXP_INSTR('© Cat', 'C') AS "Character",
    REGEXP_INSTR(BINARY '© Cat', 'C') AS "Binary";

Wynik:

+-----------+--------+
| Character | Binary |
+-----------+--------+
|         3 |      4 |
+-----------+--------+

Symbol praw autorskich używa dwóch bajtów, dlatego w tym przykładzie otrzymujemy wynik 4 podczas przesyłania go do BINARY , w porównaniu do 3 że otrzymamy inaczej.

Pamiętaj jednak, że przekazywanie BINARY string wpływa również na rozróżnianie wielkości liter. Z BINARY ciągi znaków, znak z dużej litery jest inny niż jego odpowiednik z małej litery:

SELECT 
    REGEXP_INSTR('© Cat', 'c') AS "Character",
    REGEXP_INSTR(BINARY '© Cat', 'c') AS "Binary";

Wynik:

+-----------+--------+
| Character | Binary |
+-----------+--------+
|         3 |      0 |
+-----------+--------+

Tutaj szukałem małej litery c zamiast wielkich liter, a BINARY ciąg nie pasował.

Argumenty zerowe

Przekazywanie null ponieważ dowolny argument daje wynik null :

SELECT 
    REGEXP_INSTR(null, 'c') AS "1",
    REGEXP_INSTR('Cat', null) AS "2",
    REGEXP_INSTR(null, null) AS "3";

Wynik:

+------+------+------+
| 1    | 2    | 3    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+

Niewłaściwa liczba argumentów

Przekazanie nieprawidłowej liczby argumentów lub brak argumentów skutkuje błędem:

SELECT REGEXP_INSTR('Cat');

Wynik:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'REGEXP_INSTR'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uruchamianie ProxySQL jako kontenera pomocniczego na Kubernetes

  2. MariaDB 10.6 i NextCloud:COMPRESSED Row jest domyślnie tylko do odczytu

  3. Porównanie ręcznych wdrożeń baz danych z wdrożeniami automatycznymi

  4. Porównanie ofert chmury klastrowej Galera:część trzecia Microsoft Azure

  5. Zapowiedź ClusterControl 1.7.4:Replikacja między klastrami — ostateczne odzyskiwanie po awarii