sql >> Databáze >  >> RDS >> Mysql

Jak vrátit pozici položky seznamu v MySQL

V MySQL můžete použít FIND_IN_SET() funkce, která vrátí index dané položky seznamu v seznamu řetězců (například „položka1, položka2, položka3,…“).

Funkce má dva argumenty; řetězec, který se má najít, a seznam, který se má hledat.

Syntaxe vypadá takto:

FIND_IN_SET(str,strlist)

Kde str je řetězec, který hledáte, a strlist je seznam řetězců k prohledávání.

Příklad

Zde je příklad:

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

Výsledek:

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

To vrátí 2 protože to je pozice řetězce Dog v seznamu řetězců.

Všimněte si, že je vrácen pouze index prvního výskytu. Pokud tedy došlo k dalšímu výskytu Dog po tomto prvním bychom stále dostali stejný výsledek:

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

Výsledek:

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

Žádné shody

Když řetězec není nalezen, výsledek 0 je vráceno:

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

Výsledek:

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

Co když první argument obsahuje čárku?

Funkce nevrátí kladný výsledek, pokud první argument obsahuje čárku.

Zde je příklad:

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

Výsledek:

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

V tomto příkladu by se dalo očekávat, že vrátí kladný výsledek (s ohledem na Cat,Dog je ve skutečnosti v seznamu), čárka se však v seznamu používá jako oddělovač, a proto shoda řetězců nefunguje.

Viz také Jak vrátit pozici argumentu v seznamu argumentů pomocí FIELD() funkce.


  1. Předat více hodnot v jednom parametru

  2. Liquibase/PostgreSQL:jak správně zachovat případ tabulky?

  3. PDO::__construct():Server odeslal znakovou sadu (255) neznámou klientovi. Prosím, nahlaste to vývojářům

  4. Získejte ID z podmíněného INSERT