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).