V MariaDB, SUBSTR()
je synonymem pro SUBSTRING()
.
Je to vestavěná řetězcová funkce, která vrací podřetězec z daného řetězce.
Vyžaduje alespoň dva argumenty; řetězec a pozici, ze které se má podřetězec extrahovat. Přijímá také volitelný třetí argument, který vám umožňuje určit, jak dlouhý má být podřetězec.
Syntaxe
Syntaxe má následující tvary:
SUBSTR(str,pos),
SUBSTR(str FROM pos),
SUBSTR(str,pos,len),
SUBSTR(str FROM pos FOR len)
Kde str
je řetězec, pos
je počáteční pozice podřetězce a len
je počet znaků k extrakci.
Dva formuláře, které používají FROM
klíčová slova jsou standardní syntaxí SQL.
Příklad
Zde je základní příklad:
SELECT SUBSTR('Good doggy', 6);
Výsledek:
+-------------------------+ | SUBSTR('Good doggy', 6) | +-------------------------+ | doggy | +-------------------------+
Zde je stejný příklad, ale s použitím standardní syntaxe SQL:
SELECT SUBSTR('Good doggy' FROM 6);
Výsledek:
+-----------------------------+ | SUBSTR('Good doggy' FROM 6) | +-----------------------------+ | doggy | +-----------------------------+
Délka podřetězce
Zde je příklad, který určuje délku podřetězce k extrahování:
SELECT SUBSTR('Good doggy', 6, 3);
Výsledek:
+----------------------------+ | SUBSTR('Good doggy', 6, 3) | +----------------------------+ | dog | +----------------------------+
A zde používá standardní syntaxi SQL:
SELECT SUBSTR('Good doggy' FROM 6 FOR 3);
Výsledek:
+-----------------------------------+ | SUBSTR('Good doggy' FROM 6 FOR 3) | +-----------------------------------+ | dog | +-----------------------------------+
Záporná pozice
Zadání záporné hodnoty pro pozici způsobí, že počáteční pozice bude počítána zpětně od konce řetězce:
SELECT SUBSTR('Good doggy', -5);
Výsledek:
+--------------------------+ | SUBSTR('Good doggy', -5) | +--------------------------+ | doggy | +--------------------------+
Zápornou pozici lze také použít při použití standardní syntaxe SQL:
SELECT SUBSTR('Good doggy' FROM -5 FOR 3);
Výsledek:
+------------------------------------+ | SUBSTR('Good doggy' FROM -5 FOR 3) | +------------------------------------+ | dog | +------------------------------------+
V tomto případě jsem také nastavil délku podřetězce.
Režim Oracle
V režimu Oracle je počáteční pozice 0
(nula) se považuje za 1
. Počáteční pozice však 1
je také považováno za 1
.
To je na rozdíl od jiných režimů, kde 0
vrátí prázdný řetězec.
Příklad:
SET SQL_MODE=ORACLE;
SELECT
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Výsledek:
+------------+------------+ | 0 | 1 | +------------+------------+ | Good doggy | Good doggy | +------------+------------+
Zde je ve výchozím režimu:
SET SQL_MODE=DEFAULT;
SELECT
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Výsledek:
+------+------------+ | 0 | 1 | +------+------------+ | | Good doggy | +------+------------+
Nulové argumenty
Pokud jsou některé (nebo všechny) argumenty null
, SUBSTR()
funkce vrací null
:
SELECT
SUBSTR(null, 3, 3),
SUBSTR('Doggy', null, 3),
SUBSTR('Doggy', 3, null),
SUBSTR(null, null, null);
Výsledek:
+--------------------+--------------------------+--------------------------+--------------------------+ | SUBSTR(null, 3, 3) | SUBSTR('Doggy', null, 3) | SUBSTR('Doggy', 3, null) | SUBSTR(null, null, null) | +--------------------+--------------------------+--------------------------+--------------------------+ | NULL | NULL | NULL | NULL | +--------------------+--------------------------+--------------------------+--------------------------+
Chybí argumenty
Volání SUBSTR()
bez předání jakýchkoli argumentů dojde k chybě:
SELECT SUBSTR();
Výsledek:
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