I MariaDB, SUBSTRING_INDEX()
är en inbyggd strängfunktion. Den returnerar en delsträng från en sträng före ett visst antal förekomster av den angivna avgränsaren.
SUBSTRING_INDEX()
kräver tre argument; strängen, avgränsaren och antalet (dvs. antalet förekomster av den avgränsaren).
Syntax
Syntaxen ser ut så här:
SUBSTRING_INDEX(str,delim,count)
Där str
är strängen, delim
är avgränsaren och count
är antalet förekomster av den avgränsaren som ska användas för att bestämma delsträngen som ska returneras.
Om count
är positivt, returneras allt till vänster om den sista avgränsaren (räknat från vänster). Om count
är negativ returneras allt till höger om den sista avgränsaren (räknat från höger).
Exempel
Här är ett grundläggande exempel:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', 3);
Resultat:
+-------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', 3) | +-------------------------------------------------------+ | /users/homer | +-------------------------------------------------------+
Negativt antal
Att ange ett negativt värde för räkningen gör att det räknas bakåt från slutet av strängen:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', -3);
Resultat:
+--------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', -3) | +--------------------------------------------------------+ | homer/docs/cat_vids | +--------------------------------------------------------+
Det gick inte att hitta avgränsare
Om avgränsaren inte finns i strängen, returneras hela strängen:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '.', 3);
Resultat:
+-------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '.', 3) | +-------------------------------------------------------+ | /users/homer/docs/cat_vids | +-------------------------------------------------------+
Nollargument
Om något (eller alla) av argumenten är null
, SUBSTRING_INDEX()
funktion returnerar null
:
SELECT
SUBSTRING_INDEX(null, '/', 3) AS "1",
SUBSTRING_INDEX('/users/homer/docs/cat_vids', null, 3) AS "2",
SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', null) AS "3",
SUBSTRING_INDEX(null, null, null) AS "4";
Resultat:
+------+------+------+------+ | 1 | 2 | 3 | 4 | +------+------+------+------+ | NULL | NULL | NULL | NULL | +------+------+------+------+
Argument saknas
Anropar SUBSTRING_INDEX()
utan att skicka några argument resulterar i ett fel:
SELECT SUBSTRING_INDEX();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SUBSTRING_INDEX'