In MariaDB, POSITION()
is een ingebouwde tekenreeksfunctie die de positie van het eerste voorkomen van een subtekenreeks binnen een andere tekenreeks retourneert. Het maakt deel uit van ODBC 3.0.
POSITION(substr IN str)
is een synoniem voor LOCATE(substr,str)
.
POSITION()
is ook vergelijkbaar met de INSTR()
functie, behalve dat POSITION()
gebruikt de IN
syntaxis, en dat de argumentvolgorde tussen deze twee functies wordt omgekeerd.
Syntaxis
De syntaxis gaat als volgt:
POSITION(substr IN str)
Waar str
is de string, en substr
is de subtekenreeks waarvan de positie moet worden geretourneerd.
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT POSITION('cute' IN 'My cute dog');
Resultaat:
+-----------------------------------+ | POSITION('cute' IN 'My cute dog') | +-----------------------------------+ | 4 | +-----------------------------------+
Hoofdlettergevoeligheid
POSITION()
voert een hoofdletterongevoelige zoekopdracht uit:
SELECT POSITION('CUTE' IN 'My cute dog');
Resultaat:
+-----------------------------------+ | POSITION('CUTE' IN 'My cute dog') | +-----------------------------------+ | 4 | +-----------------------------------+
Meerdere gebeurtenissen
Als de subtekenreeks meer dan één keer voorkomt, wordt alleen de positie van de eerste (vanaf de startpositie) geretourneerd:
SELECT POSITION('cute' IN 'My cute dog is SOOOO cute!');
Resultaat:
+--------------------------------------------------+ | POSITION('cute' IN 'My cute dog is SOOOO cute!') | +--------------------------------------------------+ | 4 | +--------------------------------------------------+
Gedeeltelijke overeenkomst
Als de subtekenreeks deel uitmaakt van een groter woord, is het nog steeds een overeenkomst:
SELECT POSITION('dog' IN 'My doggy is SOOO cute!');
Resultaat:
+---------------------------------------------+ | POSITION('dog' IN 'My doggy is SOOO cute!') | +---------------------------------------------+ | 4 | +---------------------------------------------+
Maar als de string slechts een deel van de substring is, is het geen overeenkomst:
SELECT POSITION('doggy' IN 'My dog is SOOO cute!');
Resultaat:
+---------------------------------------------+ | POSITION('doggy' IN 'My dog is SOOO cute!') | +---------------------------------------------+ | 0 | +---------------------------------------------+
Spaties
Het spatieteken is nog steeds een tekenreeks, dus we kunnen spaties in de subtekenreeks opnemen, zelfs als dit het enige teken is:
SELECT POSITION(' ' IN 'My dog');
Resultaat:
+---------------------------+ | POSITION(' ' IN 'My dog') | +---------------------------+ | 3 | +---------------------------+
Lege string
Dit is wat er gebeurt als de subtekenreeks een lege tekenreeks is:
SELECT POSITION('' IN 'My dog');
Resultaat:
+--------------------------+ | POSITION('' IN 'My dog') | +--------------------------+ | 1 | +--------------------------+
Geen overeenkomst
Als de subtekenreeks niet in de tekenreeks wordt gevonden, POSITION()
retourneert 0
:
SELECT position('cat' IN 'My dog');
Resultaat:
+-----------------------------+ | position('cat' IN 'My dog') | +-----------------------------+ | 0 | +-----------------------------+
Nullargumenten
null
opgeven voor elk van de argumenten resulteert in null
:
SELECT
POSITION(null IN 'My dog'),
POSITION('dog' IN null);
Resultaat:
+----------------------------+-------------------------+ | POSITION(null IN 'My dog') | POSITION('dog' IN null) | +----------------------------+-------------------------+ | NULL | NULL | +----------------------------+-------------------------+
Het verkeerde aantal argumenten geven
POSITION()
. aanroepen met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten resulteert in een fout:
SELECT POSITION('dog');
Resultaat:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1