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

[Aporte] Simular hacer un split a una cadena y recorrerla en un Stored Procedure

Estas en el tema de [Aporte] Simular hacer un split a una cadena y recorrerla en un Stored Procedure en el foro de Mysql en Foros del Web. Bueno como la verdad he hecho ya bastantes codigos para simular el famoso split o explode pero en MySQL y al fin creo que he ...
  #1 (permalink)  
Antiguo 15/11/2012, 17:12
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años
Puntos: 47
[Aporte] Simular hacer un split a una cadena y recorrerla en un Stored Procedure

Bueno como la verdad he hecho ya bastantes codigos para simular el famoso split o explode pero en MySQL y al fin creo que he dado con uno dentro de todo sencillo, lo queria compartir con la comunidad ya que quizas a alguien le pueda resultar util :) desde ya los que saben mucho mas de esto que yo pueden mejorarlo y compartirlo lo cual seria genial pero bueno de momento les dejo el que hice yo espero les sirva :) aqui va:

Código MySQL:
Ver original
  1. -- --------------------------------------------------------------------------------
  2. -- Routine DDL
  3. -- Note: comments before and after the routine body will not be stored by the server
  4. -- --------------------------------------------------------------------------------
  5. DELIMITER $$
  6.  
  7. CREATE DEFINER=`root`@`localhost` PROCEDURE `split`(cadena TEXT, separador VARCHAR(20))
  8.  
  9.     DECLARE itemArray TEXT;
  10.     DECLARE i INT;
  11.  
  12.     SET i = 1; # se le puede dar cualquier valor menos 0.
  13.  
  14.     # INTRO BUCLE
  15.  
  16.     WHILE i > 0 DO
  17.  
  18.         SET i = INSTR(cadena,separador);
  19.         # seteo i a la posicion donde esta el caracter para separar
  20.         # realiza lo mismo que indexOf en javascript
  21.  
  22.         SET itemArray = SUBSTRING(cadena,1,i-1);
  23.         # esta variable guardara el valor actual del supuesto array
  24.         # se logra cortando desde la posicion 1 que para MySQL es la primera letra (en javascript es 0)
  25.         # hasta la posicion donde se encuentra la cadena a separar -1 ya que sino incluiria el 1er caracter
  26.         # del caracter o cadena de caracteres que hacen de separador
  27.        
  28.         IF i > 0 THEN
  29.        
  30.             SET cadena = SUBSTRING(cadena,i+CHAR_LENGTH(separador),CHAR_LENGTH(cadena));
  31.                
  32.         # corto / preparo la cadena total para la proxima vez que se entre al bucle para eso corto desde la posicion
  33.         # donde esta el caracter separador hasta el tamaño total de la cadena
  34.         # como el separador puede ser de n caracteres en el 2do parametro paso i que es la posicion del separador
  35.         # sumado al tamaño de su cadena
  36.  
  37.         ELSE
  38.        
  39.         # si el if entra aca es porque i ya vale 0 y no entrara nuevamente al bucle lo cual significa que la
  40.         # cadena original ya no tiene separadores por ende lo que queda de ella es igual a la ultima posicion
  41.         # del supuesto array
  42.  
  43.             SET itemArray = cadena;
  44.  
  45.        
  46.         END IF;
  47.        
  48.         # he creado una tabla test que tiene como estructura:
  49.         # id int, i int, texto1 text, texto2 text para subir de muestra como cambia el indice (i)
  50.         # y como sube el elemento iterado y por ultimo la cadena original para ver como va mutando
  51.  
  52.         INSERT INTO test (i,texto1,texto2) VALUES (i,itemArray,cadena);
  53.  
  54.     END WHILE;
  55.  

Para probarlo basta pasarle por parametros un texto separado por el caracter o caracteres que querramos y seguido el separador por ej:

Código MySQL:
Ver original
  1. CALL split("Hola-Mundo-Nuevo","-");

Espero les guste y les sirva, todas las sugerencias de mejora son muy bienvenidas ;)

Salu2

Etiquetas: procedure, simular, split, sql, stored, tabla, cadenas
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 09:18.