En MariaDB, MID()
es un sinónimo de SUBSTRING()
. Devuelve una subcadena de una cadena dada.
Según la documentación de MariaDB, es un sinónimo de SUBSTRING(str,pos,len)
sintaxis de SUBSTRING()
, sin embargo, mis pruebas muestran que funciona con todas las diversas formas.
Sintaxis
Según la documentación de MariaDB, la sintaxis es la siguiente:
MID(str,pos,len)
Sin embargo, descubrí que funciona con los siguientes formularios (que son los mismos formularios que SUBSTRING()
admite):
MID(str,pos),
MID(str FROM pos),
MID(str,pos,len),
MID(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.
Ejemplo
He aquí un ejemplo básico:
SELECT MID('Drink your beer', 7);
Resultado:
+---------------------------+ | MID('Drink your beer', 7) | +---------------------------+ | your beer | +---------------------------+
Aquí está el mismo ejemplo, pero usando el FROM
sintaxis:
SELECT MID('Drink your beer' FROM 7);
Resultado:
+-------------------------------+ | MID('Drink your beer' FROM 7) | +-------------------------------+ | your beer | +-------------------------------+
Longitud de subcadena
Aquí hay un ejemplo que especifica la longitud de la subcadena a extraer. Esta es la única sintaxis que cita la documentación de MariaDB para MID()
función.
SELECT MID('Drink your beer', 7, 4);
Resultado:
+------------------------------+ | MID('Drink your beer', 7, 4) | +------------------------------+ | your | +------------------------------+
Y aquí está usando FROM...FOR
sintaxis:
SELECT MID('Drink your beer' FROM 7 FOR 4);
Resultado:
+-------------------------------------+ | MID('Drink your beer' FROM 7 FOR 4) | +-------------------------------------+ | your | +-------------------------------------+
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 MID('Drink your beer', -9);
Resultado:
+----------------------------+ | MID('Drink your beer', -9) | +----------------------------+ | your beer | +----------------------------+
También se puede usar una posición negativa cuando se usa FROM
sintaxis:
SELECT MID('Drink your beer' FROM -9 FOR 4);
Resultado:
+--------------------------------------+ | MID('Drink your beer' FROM -9 FOR 4) | +--------------------------------------+ | your | +--------------------------------------+
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
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Resultado:
+-----------------+-----------------+ | 0 | 1 | +-----------------+-----------------+ | Drink your beer | Drink your beer | +-----------------+-----------------+
Aquí está en modo predeterminado:
SET SQL_MODE=DEFAULT;
SELECT
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Resultado:
+------+-----------------+ | 0 | 1 | +------+-----------------+ | | Drink your beer | +------+-----------------+
Argumentos nulos
Si alguno (o todos) de los argumentos son null
, el MID()
la función devuelve null
:
SELECT
MID(null, 3, 3),
MID('Beer', null, 3),
MID('Beer', 3, null),
MID(null, null, null);
Resultado:
+-----------------+----------------------+----------------------+-----------------------+ | MID(null, 3, 3) | MID('Beer', null, 3) | MID('Beer', 3, null) | MID(null, null, null) | +-----------------+----------------------+----------------------+-----------------------+ | NULL | NULL | NULL | NULL | +-----------------+----------------------+----------------------+-----------------------+
Argumentos faltantes
Llamando a MID()
sin pasar ningún argumento da como resultado un error:
SELECT MID();
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