Dwie podobne funkcje w MariaDB to FIELD() i FIND_IN_SET() . Na pierwszy rzut oka wydaje się, że robią to samo, ale jest różnica.
W tym artykule przyjrzymy się różnicy między tymi dwiema funkcjami.
Składnia i definicje
Najpierw spójrzmy na składnię i definicję każdej funkcji:
| Funkcja | Składnia | Definicja |
|---|---|---|
FIELD() | FIELD(pattern, str1[,str2,...]) | Zwraca pozycję indeksu ciągu lub liczby pasującej do podanego wzorca. |
FIND_IN_SET() | FIND_IN_SET(pattern, strlist) | Zwraca pozycję indeksu, w której dany wzorzec występuje na liście ciągów. |
Obie funkcje akceptują pattern jako ich pierwszy argument. Jednak to, co następuje później, podkreśla ich różnice:
FIELD()akceptuje jeden lub więcej ciągów oddzielonych przecinkiem.FIND_IN_SET()akceptuje pojedynczą listę ciągów.
Przykład
Oto przykład, który pokazuje różnicę między tymi dwiema funkcjami:
SELECT
FIELD('bat', 'cat','dog','bat') AS "FIELD()",
FIND_IN_SET('bat', 'cat,dog,bat') AS "FIND_IN_SET()"; Wynik:
+---------+---------------+ | FIELD() | FIND_IN_SET() | +---------+---------------+ | 3 | 3 | +---------+---------------+
Każda funkcja zwróciła ten sam wynik, ale każda funkcja przyjęła ciągi w innym formacie.
Wartości dostarczone do FIELD() przyszły jako trzy oddzielne argumenty, podczas gdy wartości dostarczone do FIND_IN_SET() przyszedł jako pojedyncza lista ciągów (która zawierała oddzielne wartości).