2012-09-11 15 views
8

Necesito la funcionalidad de initcap para los nombres de las regiones. ¿Hay alguna forma de lograr esto en MySQL?¿Cómo puedo lograr la funcionalidad de initcap en MySQL?

  • África
  • la India Sub Continente
  • EE.UU. Costa Oeste
  • Europa/U.K

de esta manera los resultados pueden ser? ¿Alguna sugerencia? Gracias por adelantado.

+0

Véanse los comentarios sobre la [página de documentación] (http://dev.mysql.com/doc/refman/5.1/en/string-functions.html) para las funciones de cadena. –

Respuesta

13

Hace algún tiempo estaba buscando una función integrada initcap/ucfirst en MySQL pero desafortunadamente no pude encontrar tales funciones de cadena así que decidí escribir la mía ... gracias al miembro de la comunidad MySQL que corrigió el error en mi función & lo publicó de nuevo.

DELIMITER $$ 

DROP FUNCTION IF EXISTS `test`.`initcap`$$ 

CREATE FUNCTION `initcap`(x char(30)) RETURNS char(30) CHARSET utf8 
BEGIN 
SET @str=''; 
SET @l_str=''; 
WHILE x REGEXP ' ' DO 
SELECT SUBSTRING_INDEX(x, ' ', 1) INTO @l_str; 
SELECT SUBSTRING(x, LOCATE(' ', x)+1) INTO x; 
SELECT CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(@l_str,1,1)),LOWER(SUBSTRING(@l_str,2)))) INTO @str; 
END WHILE; 
RETURN LTRIM(CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(x,1,1)),LOWER(SUBSTRING(x,2))))); 
END$$ 

DELIMITER ; 


Usage: 

select initcap('This is test string'); 
+0

gracias @nDudani es realmente útil !! – NIKHIL

+2

No apruebe [dicha edición sugerida] (http://stackoverflow.com/review/suggested-edits/950604). Ver mi comentario – hims056

+0

bien, me ocuparé la próxima vez –

0
DELIMITER $$ 

DROP FUNCTION IF EXISTS `test`.`initcap`$$ 

CREATE FUNCTION `initcap`(x char(30)) RETURNS char(30) CHARSET utf8 
BEGIN 
SET @str=''; 
SET @l_str=''; 
WHILE x REGEXP ' ' DO 
SELECT SUBSTRING_INDEX(x, ' ', 1) INTO @l_str; 
SELECT SUBSTRING(x, LOCATE(' ', x)+1) INTO x; 
SELECT CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(@l_str,1,1)),LOWER(SUBSTRING(@l_str,2)))) INTO @str; 
END WHILE; 
RETURN LTRIM(CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(x,1,1)),LOWER(SUBSTRING(x,2))))); 
END$$ 

DELIMITER ; 
0
CREATE FUNCTION `upperfirst`(x varchar(255)) RETURNS varchar(255) CHARSET latin1 

RETURN concat(upper(substring(x,1,1)),lower(substring(x,2))); 
+1

Por favor, aclare su respuesta . – Kartoch

Cuestiones relacionadas