I MariaDB, SUBSTRING()
är en inbyggd strängfunktion som returnerar en delsträng från en given sträng.
SUBSTRING()
kräver minst två argument; strängen och den position som understrängen ska extraheras från. Den accepterar också ett valfritt tredje argument som låter dig specificera hur lång delsträngen ska vara.
Syntax
Syntaxen har följande former:
SUBSTRING(str,pos),
SUBSTRING(str FROM pos),
SUBSTRING(str,pos,len),
SUBSTRING(str FROM pos FOR len)
Där str
är strängen, pos
är startpositionen för delsträngen och len
är antalet tecken som ska extraheras.
De två formulären som använder FROM
nyckelord är standard SQL-syntax.
Exempel
Här är ett grundläggande exempel:
SELECT SUBSTRING('Big fat cat', 5);
Resultat:
+-----------------------------+ | SUBSTRING('Big fat cat', 5) | +-----------------------------+ | fat cat | +-----------------------------+
Här är samma exempel, men med standard SQL-syntax:
SELECT SUBSTRING('Big fat cat' FROM 5);
Resultat:
+---------------------------------+ | SUBSTRING('Big fat cat' FROM 5) | +---------------------------------+ | fat cat | +---------------------------------+
Längd på delsträng
Här är ett exempel som anger längden på delsträngen som ska extraheras:
SELECT SUBSTRING('Big fat cat', 5, 3);
Resultat:
+--------------------------------+ | SUBSTRING('Big fat cat', 5, 3) | +--------------------------------+ | fat | +--------------------------------+
Och här använder den standard SQL-syntax:
SELECT SUBSTRING('Big fat cat' FROM 5 FOR 3);
Resultat:
+---------------------------------------+ | SUBSTRING('Big fat cat' FROM 5 FOR 3) | +---------------------------------------+ | fat | +---------------------------------------+
Negativ position
Att ange ett negativt värde för positionen gör att startpositionen räknas bakåt från slutet av strängen:
SELECT SUBSTRING('Big fat cat', -3);
Resultat:
+------------------------------+ | SUBSTRING('Big fat cat', -3) | +------------------------------+ | cat | +------------------------------+
En negativ position kan också användas när du använder standard SQL-syntax:
SELECT SUBSTRING('Big fat cat' FROM -7 FOR 3);
Resultat:
+----------------------------------------+ | SUBSTRING('Big fat cat' FROM -7 FOR 3) | +----------------------------------------+ | fat | +----------------------------------------+
I det här fallet ställer jag också in en längd för delsträngen.
Oracle Mode
I Oracle-läge, startpositionen 0
(noll) behandlas som 1
. Däremot en startposition på 1
behandlas också som 1
.
Detta är i motsats till andra lägen, där 0
returnerar en tom sträng.
Exempel:
SET SQL_MODE=ORACLE;
SELECT
SUBSTRING('Big fat cat', 0) AS "0",
SUBSTRING('Big fat cat', 1) AS "1";
Resultat:
+-------------+-------------+ | 0 | 1 | +-------------+-------------+ | Big fat cat | Big fat cat | +-------------+-------------+
Här är den i standardläge:
SET SQL_MODE=DEFAULT;
SELECT
SUBSTRING('Big fat cat', 0) AS "0",
SUBSTRING('Big fat cat', 1) AS "1";
Resultat:
+------+-------------+ | 0 | 1 | +------+-------------+ | | Big fat cat | +------+-------------+
Nollargument
Om något (eller alla) av argumenten är null
, SUBSTRING()
funktion returnerar null
:
SELECT
SUBSTRING(null, 3, 3),
SUBSTRING('Coffee', null, 3),
SUBSTRING('Coffee', 3, null),
SUBSTRING(null, null, null);
Resultat:
+-----------------------+------------------------------+------------------------------+-----------------------------+ | SUBSTRING(null, 3, 3) | SUBSTRING('Coffee', null, 3) | SUBSTRING('Coffee', 3, null) | SUBSTRING(null, null, null) | +-----------------------+------------------------------+------------------------------+-----------------------------+ | NULL | NULL | NULL | NULL | +-----------------------+------------------------------+------------------------------+-----------------------------+
Argument saknas
Anropar SUBSTRING()
utan att skicka några argument resulterar i ett fel:
SELECT SUBSTRING();
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