sql >> Database teknologi >  >> RDS >> Mysql

Sådan returnerer du positionen for et listeelement i MySQL

I MySQL kan du bruge FIND_IN_SET() funktion til at returnere indekset for et givet listeelement inden for en strengliste (for eksempel 'emne1, item2, item3,...').

Funktionen tager to argumenter; strengen for at finde, og listen for at søge.

Syntaksen ser sådan ud:

FIND_IN_SET(str,strlist)

Hvor str er den streng, du leder efter, og strlist er strenglisten, der skal søges igennem.

Eksempel

Her er et eksempel:

SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse') AS 'Result';

Resultat:

+--------+
| Result |
+--------+
|      2 |
+--------+

Dette returnerer 2 fordi det er positionen for strengen Dog inden for strenglisten.

Bemærk, at kun indekset for den første forekomst returneres. Så hvis der var en anden forekomst af Dog efter den første vil vi stadig få det samme resultat:

SELECT FIND_IN_SET('Dog', 'Cat,Dog,Horse,Dog') AS 'Result';

Resultat:

+--------+
| Result |
+--------+
|      2 |
+--------+

Ingen match

Når strengen ikke findes, er resultatet 0 returneres:

SELECT FIND_IN_SET('Lizard', 'Cat,Dog,Horse') AS 'Result';

Resultat:

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

Hvad hvis det første argument indeholder et komma?

Funktionen returnerer ikke et positivt resultat, hvis det første argument indeholder et komma.

Her er et eksempel:

SELECT FIND_IN_SET('Cat,Dog', 'Cat,Dog,Horse') AS 'Result';

Resultat:

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

I dette eksempel kan man forvente, at det returnerer et positivt resultat (givet Cat,Dog faktisk er på listen), men kommaet bruges som et skilletegn i listen, og derfor virker strengmatchet ikke.

Se også, hvordan man returnerer et arguments position i en liste over argumenter ved at bruge FIELD() funktion.


  1. Hvorfor forbinder sqlplus ikke?

  2. Sådan bruges Distributed AD til at reducere patchingstiden i Oracle EBS

  3. Sådan får du lat og long fra sdo_geometry i oracle

  4. Microsoft Access Table Tips – Tricks og retningslinjer del III