I MariaDB, SUBSTRING()
er en indbygget strengfunktion, der returnerer en understreng fra en given streng.
SUBSTRING()
kræver mindst to argumenter; strengen og den position, som understrengen skal udtrækkes fra. Den accepterer også et valgfrit tredje argument, der giver dig mulighed for at angive, hvor lang understrengen skal være.
Syntaks
Syntaksen har følgende former:
SUBSTRING(str,pos),
SUBSTRING(str FROM pos),
SUBSTRING(str,pos,len),
SUBSTRING(str FROM pos FOR len)
Hvor str
er strengen, pos
er startpositionen for understrengen, og len
er antallet af tegn, der skal udtrækkes.
De to formularer, der bruger FROM
nøgleord er standard SQL-syntaks.
Eksempel
Her er et grundlæggende eksempel:
SELECT SUBSTRING('Big fat cat', 5);
Resultat:
+-----------------------------+ | SUBSTRING('Big fat cat', 5) | +-----------------------------+ | fat cat | +-----------------------------+
Her er det samme eksempel, men ved at bruge standard SQL-syntaks:
SELECT SUBSTRING('Big fat cat' FROM 5);
Resultat:
+---------------------------------+ | SUBSTRING('Big fat cat' FROM 5) | +---------------------------------+ | fat cat | +---------------------------------+
Længde af understreng
Her er et eksempel, der angiver længden af den understreng, der skal udtrækkes:
SELECT SUBSTRING('Big fat cat', 5, 3);
Resultat:
+--------------------------------+ | SUBSTRING('Big fat cat', 5, 3) | +--------------------------------+ | fat | +--------------------------------+
Og her bruger den standard SQL-syntaks:
SELECT SUBSTRING('Big fat cat' FROM 5 FOR 3);
Resultat:
+---------------------------------------+ | SUBSTRING('Big fat cat' FROM 5 FOR 3) | +---------------------------------------+ | fat | +---------------------------------------+
Negativ position
Angivelse af en negativ værdi for positionen bevirker, at startpositionen tælles baglæns fra slutningen af strengen:
SELECT SUBSTRING('Big fat cat', -3);
Resultat:
+------------------------------+ | SUBSTRING('Big fat cat', -3) | +------------------------------+ | cat | +------------------------------+
En negativ position kan også bruges ved brug af standard SQL-syntaks:
SELECT SUBSTRING('Big fat cat' FROM -7 FOR 3);
Resultat:
+----------------------------------------+ | SUBSTRING('Big fat cat' FROM -7 FOR 3) | +----------------------------------------+ | fat | +----------------------------------------+
I dette tilfælde indstiller jeg også en længde for understrengen.
Oracle Mode
Når du er i Oracle-tilstand, en startposition på 0
(nul) behandles som 1
. Men en startposition på 1
behandles også som 1
.
Dette er i modsætning til andre tilstande, hvor 0
returnerer en tom streng.
Eksempel:
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 | +-------------+-------------+
Her er den i standardtilstand:
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 | +------+-------------+
Nul-argumenter
Hvis nogen (eller alle) af argumenterne er null
, SUBSTRING()
funktion returnerer 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 | +-----------------------+------------------------------+------------------------------+-----------------------------+
Manglende argumenter
Kalder SUBSTRING()
uden at sende nogen argumenter resulterer det i en fejl:
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