Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/02/2014, 04:54
Avatar de gnzsoloyo
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: Concat, substr y locate.

Como te dicen, hay casos que no se pueden resolver simplemente con una funcion almacenada por sus características sin recursividad..
Pero hay un problema adicional: En MySQL no existe la posibilidad de hacer funciones o procesos recursivos. No lo admite.

A pesar de eso, existe una forma de lograr algo como lo que pretendes, y sería iterando un SUBSTRING_INDEX usando LOOP o REPEAT.
Podría ser algo así, por ejemplo:

Código MySQL:
Ver original
  1. CREATE FUNCTION iniciales(texto VARCHAR(250) RETURNS VARCHAR(100)
  2.   DECLARE resto VARCHAR(250);
  3.   DECLARE inicial VARCHAR (100);
  4.  
  5.   /* VErificar que no hayan ingresado un valor vacío */
  6.   IF TRIM(resto) = '' THEN
  7.     RETURN '';
  8.   END IF;
  9.  
  10.   SET inicial = CONCAT(UPPER(LEFT(TRIM(texto), -1)), '.');
  11.   SET resto = SUBSTRING_INDEX(texto, ' ' , 1);
  12.  
  13.   /* Verificar si sólo se ingresó una palabra */
  14.   IF LOCATE(resto, ' ') = 0 THEN
  15.     RETURN inicial;
  16.   END IF;
  17.  
  18.   REPEAT
  19.     /* Tomar siguiente incial*/
  20.     SET inicial = CONCAT(UPPER(LEFT(TRIM(resto), -1)), '.');
  21.     /* Quitar el segmento */
  22.     IF LOCATE(resto, ' ') > 0 THEN
  23.       SET resto   = SUBSTRING_INDEX(resto, ' ' , -1);
  24.     END IF;
  25.   UNTIL LOCATE(resto, ' ') = 0 END REPEAT;
  26.  
  27.   RETURN inicial;

Obviamente, esto devovlerá como iniciales todas las palabras que encuentre, sin importar si tiene una sola letra o no. Y no reconocerá otros símbolos, como "-".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 12/02/2014 a las 07:54