En MariaDB, SUBSTR()
es un sinónimo de SUBSTRING()
.
Es una función de cadena integrada que devuelve una subcadena de una cadena dada.
Requiere al menos dos argumentos; la cadena y la posición desde la que extraer la subcadena. También acepta un tercer argumento opcional que le permite especificar la longitud que debe tener la subcadena.
Sintaxis
La sintaxis toma las siguientes formas:
SUBSTR(str,pos),
SUBSTR(str FROM pos),
SUBSTR(str,pos,len),
SUBSTR(str FROM pos FOR len)
Donde str
es la cadena, pos
es la posición inicial de la subcadena y len
es el número de caracteres a extraer.
Las dos formas que usan FROM
palabra clave son sintaxis SQL estándar.
Ejemplo
He aquí un ejemplo básico:
SELECT SUBSTR('Good doggy', 6);
Resultado:
+-------------------------+ | SUBSTR('Good doggy', 6) | +-------------------------+ | doggy | +-------------------------+
Este es el mismo ejemplo, pero usando la sintaxis SQL estándar:
SELECT SUBSTR('Good doggy' FROM 6);
Resultado:
+-----------------------------+ | SUBSTR('Good doggy' FROM 6) | +-----------------------------+ | doggy | +-----------------------------+
Longitud de subcadena
Aquí hay un ejemplo que especifica la longitud de la subcadena a extraer:
SELECT SUBSTR('Good doggy', 6, 3);
Resultado:
+----------------------------+ | SUBSTR('Good doggy', 6, 3) | +----------------------------+ | dog | +----------------------------+
Y aquí está usando la sintaxis SQL estándar:
SELECT SUBSTR('Good doggy' FROM 6 FOR 3);
Resultado:
+-----------------------------------+ | SUBSTR('Good doggy' FROM 6 FOR 3) | +-----------------------------------+ | dog | +-----------------------------------+
Posición negativa
Especificar un valor negativo para la posición hace que la posición inicial se cuente hacia atrás desde el final de la cadena:
SELECT SUBSTR('Good doggy', -5);
Resultado:
+--------------------------+ | SUBSTR('Good doggy', -5) | +--------------------------+ | doggy | +--------------------------+
También se puede usar una posición negativa cuando se usa la sintaxis SQL estándar:
SELECT SUBSTR('Good doggy' FROM -5 FOR 3);
Resultado:
+------------------------------------+ | SUBSTR('Good doggy' FROM -5 FOR 3) | +------------------------------------+ | dog | +------------------------------------+
En este caso, también establecí una longitud para la subcadena.
Modo oráculo
Cuando está en modo Oracle, una posición de inicio de 0
(cero) se trata como 1
. Sin embargo, una posición inicial de 1
también se trata como 1
.
Esto contrasta con otros modos, donde 0
devolverá una cadena vacía.
Ejemplo:
SET SQL_MODE=ORACLE;
SELECT
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Resultado:
+------------+------------+ | 0 | 1 | +------------+------------+ | Good doggy | Good doggy | +------------+------------+
Aquí está en modo predeterminado:
SET SQL_MODE=DEFAULT;
SELECT
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Resultado:
+------+------------+ | 0 | 1 | +------+------------+ | | Good doggy | +------+------------+
Argumentos nulos
Si alguno (o todos) de los argumentos son null
, el SUBSTR()
la función devuelve null
:
SELECT
SUBSTR(null, 3, 3),
SUBSTR('Doggy', null, 3),
SUBSTR('Doggy', 3, null),
SUBSTR(null, null, null);
Resultado:
+--------------------+--------------------------+--------------------------+--------------------------+ | SUBSTR(null, 3, 3) | SUBSTR('Doggy', null, 3) | SUBSTR('Doggy', 3, null) | SUBSTR(null, null, null) | +--------------------+--------------------------+--------------------------+--------------------------+ | NULL | NULL | NULL | NULL | +--------------------+--------------------------+--------------------------+--------------------------+
Argumentos faltantes
Llamando a SUBSTR()
sin pasar ningún argumento da como resultado un error:
SELECT SUBSTR();
Resultado:
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