Två liknande funktioner i MariaDB är FIELD()
och FIND_IN_SET()
. Vid första anblicken verkar dessa göra samma sak, men det finns en skillnad.
Den här artikeln tittar på skillnaden mellan dessa två funktioner.
Syntax och definitioner
Låt oss först titta på syntaxen och definitionen av varje funktion:
Funktion | Syntax | Definition |
---|---|---|
FIELD() | FIELD(pattern, str1[,str2,...]) | Återställer indexpositionen för strängen eller numret som matchar det givna mönstret. |
FIND_IN_SET() | FIND_IN_SET(pattern, strlist) | Återställer indexpositionen där det givna mönstret förekommer i en stränglista. |
Båda funktionerna accepterar ett pattern
som deras första argument. Men det är vad som kommer härnäst som framhäver deras skillnader:
FIELD()
accepterar en eller flera strängar, separerade med kommatecken.FIND_IN_SET()
accepterar en lista med en enda sträng.
Exempel
Här är ett exempel som visar skillnaden mellan dessa två funktioner:
SELECT
FIELD('bat', 'cat','dog','bat') AS "FIELD()",
FIND_IN_SET('bat', 'cat,dog,bat') AS "FIND_IN_SET()";
Resultat:
+---------+---------------+ | FIELD() | FIND_IN_SET() | +---------+---------------+ | 3 | 3 | +---------+---------------+
Varje funktion returnerade samma resultat, men varje funktion accepterade strängarna i olika format.
Värdena som tillhandahålls till FIELD()
kom som tre separata argument, medan värdena till FIND_IN_SET()
kom som en enda stränglista (som innehöll de separata värdena).