I MariaDB, POSITION()
er en indbygget strengfunktion, der returnerer positionen for den første forekomst af en understreng i en anden streng. Det er en del af ODBC 3.0.
POSITION(substr IN str)
er et synonym for LOCATE(substr,str)
.
POSITION()
ligner også INSTR()
funktion, bortset fra at POSITION()
bruger IN
syntaks, og at argumentrækkefølgen er vendt mellem disse to funktioner.
Syntaks
Syntaksen ser sådan ud:
POSITION(substr IN str)
Hvor str
er strengen, og substr
er den understreng, som positionen skal returneres for.
Eksempel
Her er et grundlæggende eksempel:
SELECT POSITION('cute' IN 'My cute dog');
Resultat:
+-----------------------------------+ | POSITION('cute' IN 'My cute dog') | +-----------------------------------+ | 4 | +-----------------------------------+
Skrivar og bogstaver
POSITION()
udfører en søgning uden store og små bogstaver:
SELECT POSITION('CUTE' IN 'My cute dog');
Resultat:
+-----------------------------------+ | POSITION('CUTE' IN 'My cute dog') | +-----------------------------------+ | 4 | +-----------------------------------+
Flere forekomster
Hvis understrengen forekommer mere end én gang, returneres kun positionen for den første (fra startpositionen):
SELECT POSITION('cute' IN 'My cute dog is SOOOO cute!');
Resultat:
+--------------------------------------------------+ | POSITION('cute' IN 'My cute dog is SOOOO cute!') | +--------------------------------------------------+ | 4 | +--------------------------------------------------+
Delvis match
Hvis understrengen er en del af et større ord, er det stadig et match:
SELECT POSITION('dog' IN 'My doggy is SOOO cute!');
Resultat:
+---------------------------------------------+ | POSITION('dog' IN 'My doggy is SOOO cute!') | +---------------------------------------------+ | 4 | +---------------------------------------------+
Men hvis strengen kun er en del af understrengen, er den ikke et match:
SELECT POSITION('doggy' IN 'My dog is SOOO cute!');
Resultat:
+---------------------------------------------+ | POSITION('doggy' IN 'My dog is SOOO cute!') | +---------------------------------------------+ | 0 | +---------------------------------------------+
Mellemrum
Mellemrumstegnet er stadig en streng, så vi kan inkludere mellemrum i understrengen, selvom det er det eneste tegn:
SELECT POSITION(' ' IN 'My dog');
Resultat:
+---------------------------+ | POSITION(' ' IN 'My dog') | +---------------------------+ | 3 | +---------------------------+
Tøm streng
Her er, hvad der sker, når understrengen er en tom streng:
SELECT POSITION('' IN 'My dog');
Resultat:
+--------------------------+ | POSITION('' IN 'My dog') | +--------------------------+ | 1 | +--------------------------+
Ingen match
Hvis understrengen ikke findes i strengen, POSITION()
returnerer 0
:
SELECT position('cat' IN 'My dog');
Resultat:
+-----------------------------+ | position('cat' IN 'My dog') | +-----------------------------+ | 0 | +-----------------------------+
Nul-argumenter
Giver null
for ethvert af argumenterne resulterer i null
:
SELECT
POSITION(null IN 'My dog'),
POSITION('dog' IN null);
Resultat:
+----------------------------+-------------------------+ | POSITION(null IN 'My dog') | POSITION('dog' IN null) | +----------------------------+-------------------------+ | NULL | NULL | +----------------------------+-------------------------+
Angivelse af det forkerte antal argumenter
Kalder POSITION()
med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:
SELECT POSITION('dog');
Resultat:
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