I MariaDB, POSITION()
är en inbyggd strängfunktion som returnerar positionen för den första förekomsten av en delsträng i en annan sträng. Det är en del av ODBC 3.0.
POSITION(substr IN str)
är en synonym för LOCATE(substr,str)
.
POSITION()
liknar också INSTR()
funktion, förutom att POSITION()
använder IN
syntax, och att argumentordningen är omvänd mellan dessa två funktioner.
Syntax
Syntaxen ser ut så här:
POSITION(substr IN str)
Där str
är strängen och substr
är delsträngen för vilken positionen ska returneras.
Exempel
Här är ett grundläggande exempel:
SELECT POSITION('cute' IN 'My cute dog');
Resultat:
+-----------------------------------+ | POSITION('cute' IN 'My cute dog') | +-----------------------------------+ | 4 | +-----------------------------------+
Skaftkänslighet
POSITION()
utför en skiftlägesokänslig sökning:
SELECT POSITION('CUTE' IN 'My cute dog');
Resultat:
+-----------------------------------+ | POSITION('CUTE' IN 'My cute dog') | +-----------------------------------+ | 4 | +-----------------------------------+
Flera förekomster
Om delsträngen förekommer mer än en gång, returneras endast positionen för den första (från startpositionen):
SELECT POSITION('cute' IN 'My cute dog is SOOOO cute!');
Resultat:
+--------------------------------------------------+ | POSITION('cute' IN 'My cute dog is SOOOO cute!') | +--------------------------------------------------+ | 4 | +--------------------------------------------------+
Delvis matchning
Om delsträngen är en del av ett större ord, är det fortfarande en matchning:
SELECT POSITION('dog' IN 'My doggy is SOOO cute!');
Resultat:
+---------------------------------------------+ | POSITION('dog' IN 'My doggy is SOOO cute!') | +---------------------------------------------+ | 4 | +---------------------------------------------+
Men om strängen bara är en del av understrängen är den inte en matchning:
SELECT POSITION('doggy' IN 'My dog is SOOO cute!');
Resultat:
+---------------------------------------------+ | POSITION('doggy' IN 'My dog is SOOO cute!') | +---------------------------------------------+ | 0 | +---------------------------------------------+
Spaces
Mellanslagstecknet är fortfarande en sträng, så vi kan inkludera mellanslag i understrängen, även om det är det enda tecknet:
SELECT POSITION(' ' IN 'My dog');
Resultat:
+---------------------------+ | POSITION(' ' IN 'My dog') | +---------------------------+ | 3 | +---------------------------+
Töm sträng
Så här händer när delsträngen är en tom sträng:
SELECT POSITION('' IN 'My dog');
Resultat:
+--------------------------+ | POSITION('' IN 'My dog') | +--------------------------+ | 1 | +--------------------------+
Ingen match
Om delsträngen inte hittas i strängen, POSITION()
returnerar 0
:
SELECT position('cat' IN 'My dog');
Resultat:
+-----------------------------+ | position('cat' IN 'My dog') | +-----------------------------+ | 0 | +-----------------------------+
Nollargument
Tillhandahåller null
för något av argumenten resulterar i null
:
SELECT
POSITION(null IN 'My dog'),
POSITION('dog' IN null);
Resultat:
+----------------------------+-------------------------+ | POSITION(null IN 'My dog') | POSITION('dog' IN null) | +----------------------------+-------------------------+ | NULL | NULL | +----------------------------+-------------------------+
Ange fel antal argument
Anropar POSITION()
med fel antal argument, eller utan att skicka några argument resulterar i ett fel:
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