sql >> Database teknologi >  >> RDS >> MariaDB

Sådan fungerer REGEXP_INSTR() i MariaDB

I MariaDB er REGEXP_INSTR() funktion returnerer startindekset for en understreng, der matcher det regulære udtryksmønster.

Indekset starter ved 1 . Hvis der ikke er noget match, er resultatet 0 .

Syntaks

Syntaksen ser sådan ud:

REGEXP_INSTR(subject, pattern)

Hvor emne er inputstrengen og mønsteret er det regulære udtryksmønster for understrengen.

Bemærk, at i skrivende stund MariaDBs version af REGEXP_INSTR() accepterer færre argumenter end MySQL's REGEXP_INSTR() . MySQLs version giver dig mulighed for at give argumenter for søgningens startposition, hvilken forekomst du skal søge efter, hvilken type position du skal returnere, samt en måde at forfine det regulære udtryk på.

Eksempel

Her er et grundlæggende eksempel:

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

Resultat:

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

I dette tilfælde er der et match, og understrengen starter ved position 2.

Ingen match

Her er et eksempel, hvor der ikke er nogen match:

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

Resultat:

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

Der er ingen match, så resultatet er 0 . Der er ingen match, fordi jeg specificerede, at strengen skal starte med understrengen.

Lad os ændre det, så det gør det start med den understreng:

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

Resultat:

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

Skrivar og bogstaver

REGEXP_INSTR() funktionen følger reglerne for store og små bogstaver for den effektive sortering. Matching udføres ufølsomt for store og små bogstaver for versal-ufølsomme sorteringer og store og små bogstaver for store og små bogstaver for store og små bogstaver for store og små bogstaver og for binære data.

Her er et eksempel:

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";

Resultat:

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

Min standardsortering er ufølsom mellem store og små bogstaver. De to andre strenge blev tvunget til henholdsvis en versal-ufølsom sortering og store og små bogstaver.

Angivelse af en BINÆR streng skelner også mellem store og små bogstaver (se nedenfor).

Binære strenge

Som standard måles positionerne i tegn i stedet for bytes. Du kan dog caste et multi-byte tegnsæt til BINÆR for at få offsets i bytes, hvis du har brug for det.

Eksempel:

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

Resultat:

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

Ophavsretssymbolet bruger to bytes, og derfor får vi i dette eksempel resultatet 4 når du caster det til BINÆR sammenlignet med 3 at vi får andet.

Bemærk dog, at du sender en BINÆR streng påvirker også følsomheden for store og små bogstaver. Med BINÆR strenge, er et stort bogstav anderledes end dets modstykke med små bogstaver:

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

Resultat:

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

Her søgte jeg efter små bogstaver c i stedet for et stort bogstav og BINÆR strengen matchede ikke.

Nul-argumenter

Sender null da ethvert argument resulterer i null :

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

Resultat:

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

Forkert antal argumenter

Sender det forkerte antal argumenter eller ingen argumenter, resulterer det i en fejl:

SELECT REGEXP_INSTR('Cat');

Resultat:

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

  1. MySQL TIMEDIFF() vs TIMESTAMPDIFF():Hvad er forskellen?

  2. IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY i SQL Server:Hvad er forskellen?

  3. Knee-Jerk Vent-statistikker:PAGEIOLATCH_SH

  4. 8 WP-CLI-kommandoer til at rydde op og optimere dit websted