Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Substring de cadenas por caracter | MySql

9 diciembre, 2016

Funciones que utilizo para realizar substring de cadenas en mysql.

En este caso he scrappeado todas las categorias de una web que tenía cientos de categorías, después de recoger los datos tengo todos los datos en varías columnas y miles de filas, no obstante necesito dividir más los datos en substrings.

Lo primero es encontrar el denominador comun por el que quieres separar los datos, en mi tabla puedo ver que quiero separarlos desde el caracter *, y desde la palabra Ref: (que es la referencia de unos productos)

Esta select recuperaría del primer campo c2, todo lo que venga antes del primer caracter * contando desde la izquierda , y también todo el texto que venga después del segundo caracter * contando desde la derecha.

Substring

La primera parte utilizo LEFT e INSTR, sería así:

SELECT 
LEFT( c2, INSTR( c2,  "*" ) -1 ) AS Principal
FROM datos;

La segunda parte utilizo SUBSTRING_INDEX, quedaría así:

SELECT 
SUBSTRING_INDEX( c2,  '*' , -2 ) AS Subcategoria,
FROM datos;

La select completa dónde realizo substring también de las referencias de los productos , cortando los string a partir de la palabra “Ref:”.

SELECT 
LEFT( c2, INSTR( c2,  "*" ) -1 ) AS Principal,
SUBSTRING_INDEX( c2,  '*' , -2 ) AS Subcategoria,
LEFT( c3, INSTR( c3,  "Ref:" ) -1 ) AS Descripcion, 
SUBSTRING_INDEX( c3,  'Ref:' , -1 ) AS REF
FROM datos;
mysql> SELECT SUBSTRING_INDEX('esto es un texto * esto es otro *','.',-2);
+-------------------------------------------------------------+ 
| SUBSTRING_INDEX('esto es un texto * esto es otro *','*',-2) | 
+-------------------------------------------------------------+ 
| esto es otro * |
+-------------------------------------------------------------+ 
1 row in set (0.00 sec) 

Y listo, fácil no? , solo tienes que sustituir los caracteres y campos de tus tablas para realizar subtrings cortando las cadenas a tu gusto.