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