sql >> Databasteknik >  >> RDS >> Mysql

3 sätt att hitta positionen för en delsträng i en sträng i MySQL

MySQL har ett antal strängfunktioner som returnerar positionen för en delsträng i en sträng. Mer specifikt returnerar de positionen för den första förekomsten i strängen (eller den första förekomsten efter en given startpunkt).

Funktionerna jag hänvisar till är följande:

  • INSTR()
  • LOCATE()
  • POSITION()

Nedan finns en översikt över var och en.

INSTR()

INSTR() funktion returnerar den första förekomsten av en delsträng i en sträng.

Här är syntaxen:

INSTR(str,substr)

Där str är strängen du vill söka efter, och substr är understrängen som du söker efter.

Exempel

SELECT INSTR('Cats and dogs like to run', 'dogs') AS Result;

Resultat:

+--------+
| Result |
+--------+
|     10 |
+--------+

I det här fallet, strängen dogs börjar på position 10.

Om delsträngen inte hittas, ett resultat av 0 returneras:

SELECT INSTR('Cats and dogs like to run', 'rabbit') AS Result;

Resultat:

+--------+
| Result |
+--------+
|      0 |
+--------+

LOCATE()

LOCATE() funktion fungerar på liknande sätt, förutom ett par skillnader; argumenten är i en annan ordning, och du kan ange en valfri tredje parameter för att indikera var du ska börja söka.

Därför kan du använda den på något av följande sätt:

LOCATE(substr,str)
LOCATE(substr,str,pos)

Den första syntaxen är precis som INTSR() syntax, förutom att str och substr byts runt.

Den andra syntaxen lägger till den valfria pos argument, som låter dig ange en position för att börja söka.

Exempel på första syntax

Här är ett exempel med den första syntaxen:

SELECT LOCATE('dogs', 'Cats and dogs like to run') AS Result;

Resultat:

+--------+
| Result |
+--------+
|     10 |
+--------+

Exempel på andra syntax

Här är ett exempel där vi anger en startposition för att börja söka:

SELECT LOCATE('cat', 'Cats, cats, and more cats!', 6) AS Result;

Resultat:

+--------+
| Result |
+--------+
|      7 |
+--------+

Vi kan se att strängen cat kan hittas på position 1, men vi angav 6 som utgångsläge. Därför var positionen för nästa förekomst av den strängen den som returnerades.

Som med INSTR() funktion, om understrängen inte hittas, 0 returneras.

POSITION()

POSITION() funktion är en synonym för LOCATE() , men med en något annorlunda syntax.

Här är syntaxen:

POSITION(substr IN str)

Detta är en synonym för följande:

LOCATE(substr,str)

Så vi skulle kunna skriva om ett av de tidigare exemplen enligt följande:

SELECT POSITION('dogs' IN 'Cats and dogs like to run') AS Result;

Resultat:

+--------+
| Result |
+--------+
|     10 |
+--------+


  1. INFOGA ... PÅ DUPLIKATNYCKELUPPDATERING med VAR?

  2. SQLite uttrycksbaserat index

  3. Vad betyder det att "normalisera" en databas?

  4. SQLite JSON_ARRAY()