Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/10/2012, 12:29
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Capitalizar palabra en una frase de mysql menos las Palabras de 1 a 3 cara

Hola elpropiopato23:

Por alguna razón no pude ver el código de la liga que pusiste en tu primer post, pero veamos, hace tiempo encontré una implementación para hacer más o menos lo que quieres:

http://www.thingy-ma-jig.co.uk/blog/...per-case-words

Sólo tuve que hacer algunos ajustes para considerar la longitud de las palabras menores a 3 caracteres:

Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP FUNCTION IF EXISTS `UC_FIRST`$$
  3.  
  4. CREATE FUNCTION UC_FIRST(oldWord VARCHAR(255)) RETURNS VARCHAR(255)
  5.   SET @regresar := oldWord;
  6.   IF LENGTH(oldWord) > 3 THEN
  7.     SET @regresar := CONCAT(UCASE(SUBSTRING(oldWord, 1, 1)),SUBSTRING(oldWord, 2));
  8.   END IF;
  9.   RETURN @regresar;
  10. END$$
  11.  
  12. DROP FUNCTION IF EXISTS UC_DELIMETER$$
  13.  
  14. CREATE FUNCTION UC_DELIMETER(oldName VARCHAR(255), delim VARCHAR(1), trimSpaces BOOL) RETURNS VARCHAR(255)
  15.   SET @oldString := LCASE(oldName);
  16.   SET @newString := "";
  17.  
  18.   tokenLoop: LOOP
  19.     IF trimSpaces THEN
  20.       SET @oldString := TRIM(BOTH " " FROM @oldString);
  21.     END IF;
  22.  
  23.     SET @splitPoint := LOCATE(delim, @oldString);
  24.  
  25.     IF @splitPoint = 0 THEN      
  26.         IF LENGTH(@newString) > 0 THEN
  27.           SET @newString := CONCAT(@newString, delim, UC_FIRST(@oldString));
  28.         ELSE
  29.           SET @newString := CONCAT(@newString, UC_FIRST(@oldString));
  30.         END IF;
  31.         LEAVE tokenLoop;        
  32.     END IF;
  33.  
  34.     IF LENGTH(@newString) > 0 THEN
  35.       SET @newString := CONCAT(@newString, delim, UC_FIRST(SUBSTRING(@oldString, 1, @splitPoint - 1)));
  36.     ELSE
  37.       SET @newString := CONCAT(@newString, UC_FIRST(SUBSTRING(@oldString, 1, @splitPoint - 1)));
  38.     END IF;
  39.     SET @oldString := SUBSTRING(@oldString, @splitPoint+1);
  40.   END LOOP tokenLoop;
  41.  
  42.   RETURN CONCAT(UCASE(SUBSTRING(@newString, 1, 1)),SUBSTRING(@newString, 2));
  43. END$$
  44. DELIMITER ;

La implementación quedaría entonces así:

Código MySQL:
Ver original
  1. mysql> SELECT UC_DELIMETER('uNA pRuEba PARA ver Si fUnCionA', ' ', FALSE);
  2. +-------------------------------------------------------------+
  3. | UC_DELIMETER('uNA pRuEba PARA ver Si fUnCionA', ' ', FALSE) |
  4. +-------------------------------------------------------------+
  5. | Una Prueba Para ver si Funciona                             |
  6. +-------------------------------------------------------------+
  7. 1 row in set (0.00 sec)

Dale un vistazo, pero creo que lo que necesitabas.

Saludos
Leo.