Twee vergelijkbare functies in MariaDB zijn FIELD()
en FIND_IN_SET()
. Op het eerste gezicht lijken deze hetzelfde te doen, maar er is een verschil.
Dit artikel gaat in op het verschil tussen deze twee functies.
Syntaxis en definities
Laten we eerst eens kijken naar de syntaxis en definitie van elke functie:
Functie | Syntaxis | Definitie |
---|---|---|
FIELD() | FIELD(pattern, str1[,str2,...]) | Retourneert de indexpositie van de tekenreeks of het nummer dat overeenkomt met het gegeven patroon. |
FIND_IN_SET() | FIND_IN_SET(pattern, strlist) | Retourneert de indexpositie waar het gegeven patroon voorkomt in een tekenreekslijst. |
Beide functies accepteren een pattern
als hun eerste argument. Het is echter wat daarna komt dat hun verschillen benadrukt:
FIELD()
accepteert een of meer tekenreeksen, gescheiden door een komma.FIND_IN_SET()
accepteert een enkele tekenreekslijst.
Voorbeeld
Hier is een voorbeeld dat het verschil tussen deze twee functies laat zien:
SELECT
FIELD('bat', 'cat','dog','bat') AS "FIELD()",
FIND_IN_SET('bat', 'cat,dog,bat') AS "FIND_IN_SET()";
Resultaat:
+---------+---------------+ | FIELD() | FIND_IN_SET() | +---------+---------------+ | 3 | 3 | +---------+---------------+
Elke functie retourneerde hetzelfde resultaat, maar elke functie accepteerde de tekenreeksen in een ander formaat.
De waarden geleverd aan FIELD()
kwamen als drie afzonderlijke argumenten, terwijl de waarden die werden verstrekt aan FIND_IN_SET()
kwam als een enkele stringlijst (die de afzonderlijke waarden bevatte).