sql >> Databáze >  >> RDS >> MariaDB

MariaDB FIELD() vs FIND_IN_SET():Jaký je rozdíl?

Dvě podobné funkce v MariaDB jsou FIELD() a FIND_IN_SET() . Na první pohled to vypadá, že dělají totéž, ale je tu rozdíl.

Tento článek se zabývá rozdílem mezi těmito dvěma funkcemi.

Syntaxe a definice

Nejprve se podívejme na syntaxi a definici každé funkce:

Funkce Syntaxe Definice
FIELD() FIELD(pattern, str1[,str2,...]) Vrátí pozici indexu řetězce nebo čísla odpovídající danému vzoru.
FIND_IN_SET() FIND_IN_SET(pattern, strlist) Vrátí pozici indexu, kde se daný vzor vyskytuje v seznamu řetězců.

Obě funkce přijímají pattern jako jejich první argument. Nicméně to, co přijde dál, zdůrazňuje jejich rozdíly:

  • FIELD() přijímá jeden nebo více řetězců oddělených čárkou.
  • FIND_IN_SET() přijímá seznam s jedním řetězcem.

Příklad

Zde je příklad, který ukazuje rozdíl mezi těmito dvěma funkcemi:

SELECT 
    FIELD('bat', 'cat','dog','bat') AS "FIELD()",
    FIND_IN_SET('bat', 'cat,dog,bat') AS "FIND_IN_SET()";

Výsledek:

+---------+---------------+
| FIELD() | FIND_IN_SET() |
+---------+---------------+
|       3 |             3 |
+---------+---------------+

Každá funkce vrátila stejný výsledek, ale každá funkce přijala řetězce v jiném formátu.

Hodnoty poskytnuté funkci FIELD() přišly jako tři samostatné argumenty, zatímco hodnoty poskytnuté funkci FIND_IN_SET() přišel jako seznam s jedním řetězcem (který obsahoval samostatné hodnoty).


  1. Dotaz PostgreSQL pro vrácení výsledků jako seznam oddělený čárkami

  2. S sqlalchemy, jak se dynamicky vázat na databázový stroj na základě požadavku

  3. Sqlite3 nevkládá více řádků v pořadí

  4. Jak odstranit vedoucí mezery v MySQL