Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Estraer cadenas separadas por patrón de texto

Estas en el tema de Estraer cadenas separadas por patrón de texto en el foro de Mysql en Foros del Web. Un saludo Maestros, Resulta que tengo un campo donde hay guardados datos separados por tres guiones, por ejemplo: hola---57---Andres---Rodriguez--- Y así sucesivamente hasta 20 datos ...
  #1 (permalink)  
Antiguo 24/11/2015, 11:50
Avatar de jpogsistem  
Fecha de Ingreso: diciembre-2001
Mensajes: 2.405
Antigüedad: 22 años, 11 meses
Puntos: 4
Estraer cadenas separadas por patrón de texto

Un saludo Maestros,

Resulta que tengo un campo donde hay guardados datos separados por tres guiones, por ejemplo:

hola---57---Andres---Rodriguez---

Y así sucesivamente hasta 20 datos concatenados...

Como hago para seleccionar cada "dato" por separado, ignorando los --- ?

Gracias de antemano
__________________
EL LIMITE ES EL UNIVERSO
  #2 (permalink)  
Antiguo 24/11/2015, 11:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Estraer cadenas separadas por patrón de texto

¿En MySQL?
Olvídalo, es imposible crear una query en esas condiciones. Tendrías que generar un stored procedure para barrer registro a registro, y ´terminarías creando algo que por programación se hace más fácil.
TEcnicamente hablando, sería mucho mejro limpiar esos guiones y dfar solo espacios en blanco.

De hecho, todo eso suena a campo multivaluado, lo que es un defecto de los peores en el diseño de una estructura de BBDD.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/11/2015, 16:02
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Estraer cadenas separadas por patrón de texto

Hola jpogsistem:

Una manera que se me ocurre, pero que es terriblemente ineficiente sería hacer uso de la función SUBSTRING_INDEX, checa este ejemplo:

http://www.w3resource.com/mysql/stri...x-function.php

de tal suerte, que podrías hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SET @cadena = 'hola---57---Andres---Rodriguez';
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> SELECT @cadena,
  5.     -> SUBSTRING_INDEX(@cadena,'---',1) AS campo1,
  6.     -> SUBSTRING_INDEX(SUBSTRING_INDEX(@cadena,'---',2),'---',-1) AS campo2,
  7.     -> SUBSTRING_INDEX(SUBSTRING_INDEX(@cadena,'---',3),'---',-1) AS campo3,
  8.     -> SUBSTRING_INDEX(SUBSTRING_INDEX(@cadena,'---',4),'---',-1) AS campo4
  9.     -> ;
  10. +--------------------------------+--------+--------+--------+-----------+
  11. | @cadena                        | campo1 | campo2 | campo3 | campo4    |
  12. +--------------------------------+--------+--------+--------+-----------+
  13. | hola---57---Andres---Rodriguez | hola   | 57     | Andres | Rodriguez |
  14. +--------------------------------+--------+--------+--------+-----------+
  15. 1 row in set (0.00 sec)

y así para los 20 campos. Coincido con gnzsoloyo en sus comentarios, esto parece ser un campo multivaluado, lo que implicaría un terrible diseño de tablas. Te conviene más crear un SP para limpiar tu información y pasarlo a una tabla que tenga los 20 campos separados.

Saludos
Leo.

Etiquetas: cadenas, campo, separadas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:24.