I MariaDB, SUBSTR()
är en synonym för SUBSTRING()
.
Det är en inbyggd strängfunktion som returnerar en delsträng från en given sträng.
Det 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:
SUBSTR(str,pos),
SUBSTR(str FROM pos),
SUBSTR(str,pos,len),
SUBSTR(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 SUBSTR('Good doggy', 6);
Resultat:
+-------------------------+ | SUBSTR('Good doggy', 6) | +-------------------------+ | doggy | +-------------------------+
Här är samma exempel, men med standard SQL-syntax:
SELECT SUBSTR('Good doggy' FROM 6);
Resultat:
+-----------------------------+ | SUBSTR('Good doggy' FROM 6) | +-----------------------------+ | doggy | +-----------------------------+
Längd på delsträng
Här är ett exempel som anger längden på delsträngen som ska extraheras:
SELECT SUBSTR('Good doggy', 6, 3);
Resultat:
+----------------------------+ | SUBSTR('Good doggy', 6, 3) | +----------------------------+ | dog | +----------------------------+
Och här använder den standard SQL-syntax:
SELECT SUBSTR('Good doggy' FROM 6 FOR 3);
Resultat:
+-----------------------------------+ | SUBSTR('Good doggy' FROM 6 FOR 3) | +-----------------------------------+ | dog | +-----------------------------------+
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 SUBSTR('Good doggy', -5);
Resultat:
+--------------------------+ | SUBSTR('Good doggy', -5) | +--------------------------+ | doggy | +--------------------------+
En negativ position kan också användas när du använder standard SQL-syntax:
SELECT SUBSTR('Good doggy' FROM -5 FOR 3);
Resultat:
+------------------------------------+ | SUBSTR('Good doggy' FROM -5 FOR 3) | +------------------------------------+ | dog | +------------------------------------+
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
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Resultat:
+------------+------------+ | 0 | 1 | +------------+------------+ | Good doggy | Good doggy | +------------+------------+
Här är den i standardläge:
SET SQL_MODE=DEFAULT;
SELECT
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Resultat:
+------+------------+ | 0 | 1 | +------+------------+ | | Good doggy | +------+------------+
Nollargument
Om något (eller alla) av argumenten är null
, SUBSTR()
funktion returnerar null
:
SELECT
SUBSTR(null, 3, 3),
SUBSTR('Doggy', null, 3),
SUBSTR('Doggy', 3, null),
SUBSTR(null, null, null);
Resultat:
+--------------------+--------------------------+--------------------------+--------------------------+ | SUBSTR(null, 3, 3) | SUBSTR('Doggy', null, 3) | SUBSTR('Doggy', 3, null) | SUBSTR(null, null, null) | +--------------------+--------------------------+--------------------------+--------------------------+ | NULL | NULL | NULL | NULL | +--------------------+--------------------------+--------------------------+--------------------------+
Argument saknas
Anropar SUBSTR()
utan att skicka några argument resulterar i ett fel:
SELECT SUBSTR();
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