MySQL – Escriba en mayúscula la primera letra de cada palabra, en la tabla existente

Tengo una tabla existente ‘people_table’, con un campo full_name .

Muchos registros tienen el campo ‘full_name’ rellenado con una carcasa incorrecta. por ejemplo, 'fred Jones' o 'fred jones' o 'Fred jones' .

Puedo encontrar estas entradas errantes con:

 SELECT * FROM people_table WHERE full_name REGEXP BINARY '^[az]'; 

¿Cómo puedo capitalizar la primera letra de cada palabra encontrada? por ejemplo, 'fred jones' convierte en 'Fred Jones' .

No hay función MySQL para hacer eso, tienes que escribir la tuya. En el siguiente enlace hay una implementación:

http://joezack.com/index.php/2008/10/20/mysql-capitalize-function/

Para usarlo, primero necesita crear la función en la base de datos. Puede hacer esto, por ejemplo, utilizando MySQL Query Browser (haga clic con el botón derecho en el nombre de la base de datos y seleccione Crear nueva función).

Después de crear la función, puede actualizar los valores en la tabla con una consulta como esta:

 UPDATE users SET name = CAP_FIRST(name); 

Si necesita ejecutarlo solo una vez y no desea crear una función, puede hacer algo realmente codificado como:

 UPDATE people_table SET full_name = LOWER(full_name); UPDATE people_table SET full_name = CONCAT(UPPER(SUBSTR(full_name,1,1)),LOWER(SUBSTR(full_name,2))); UPDATE people_table SET full_name = REPLACE(full_name,' a',' A'); UPDATE people_table SET full_name = REPLACE(full_name,' b',' B'); UPDATE people_table SET full_name = REPLACE(full_name,' c',' C'); UPDATE people_table SET full_name = REPLACE(full_name,' d',' D'); UPDATE people_table SET full_name = REPLACE(full_name,' e',' E'); UPDATE people_table SET full_name = REPLACE(full_name,' f',' F'); UPDATE people_table SET full_name = REPLACE(full_name,' g',' G'); UPDATE people_table SET full_name = REPLACE(full_name,' h',' H'); UPDATE people_table SET full_name = REPLACE(full_name,' i',' I'); UPDATE people_table SET full_name = REPLACE(full_name,' j',' J'); UPDATE people_table SET full_name = REPLACE(full_name,' k',' K'); UPDATE people_table SET full_name = REPLACE(full_name,' l',' L'); UPDATE people_table SET full_name = REPLACE(full_name,' m',' M'); UPDATE people_table SET full_name = REPLACE(full_name,' n',' N'); UPDATE people_table SET full_name = REPLACE(full_name,' o',' O'); UPDATE people_table SET full_name = REPLACE(full_name,' p',' P'); UPDATE people_table SET full_name = REPLACE(full_name,' q',' Q'); UPDATE people_table SET full_name = REPLACE(full_name,' r',' R'); UPDATE people_table SET full_name = REPLACE(full_name,' s',' S'); UPDATE people_table SET full_name = REPLACE(full_name,' t',' T'); UPDATE people_table SET full_name = REPLACE(full_name,' u',' U'); UPDATE people_table SET full_name = REPLACE(full_name,' v',' V'); UPDATE people_table SET full_name = REPLACE(full_name,' w',' W'); UPDATE people_table SET full_name = REPLACE(full_name,' x',' X'); UPDATE people_table SET full_name = REPLACE(full_name,' y',' Y'); UPDATE people_table SET full_name = REPLACE(full_name,' z',' Z'); 

Si desea utilizar todas las palabras en mayúscula, será necesario invocar una función personalizada .

 -- may help: -- DROP function if exists capitalize; DELIMITER $$ CREATE FUNCTION `capitalize`(s varchar(255)) RETURNS varchar(255) BEGIN declare c int; declare x varchar(255); declare y varchar(255); declare z varchar(255); set x = UPPER( SUBSTRING( s, 1, 1)); set y = SUBSTR( s, 2); set c = instr( y, ' '); while c > 0 do set z = SUBSTR( y, 1, c); set x = CONCAT( x, z); set z = UPPER( SUBSTR( y, c+1, 1)); set x = CONCAT( x, z); set y = SUBSTR( y, c+2); set c = INSTR( y, ' '); end while; set x = CONCAT(x, y); return x; END$$ DELIMITER ; 

Ahora hazlo de esta manera:

  UPDATE mytable SET thefield = capitalize(thefield); 

Probé el código desde arriba, pero tenía errores de syntax en la función, por lo que no pude crearlo. Escribió esto para la última versión de MySQL si ayuda a alguien

 CREATE FUNCTION `CAP_FIRST`(input VARCHAR(255)) RETURNS varchar(255) CHARSET latin1 DETERMINISTIC BEGIN DECLARE len INT; DECLARE i INT; DECLARE charnum INT; declare SortedName varchar(255); SET len = CHAR_LENGTH(input); SET input = LOWER(input); SET i = 1; set charnum = 1; set SortedName = ''; WHILE (i < = len) DO if charnum = 1 then set SortedName = concat(SortedName,upper(mid(input,i,1))); set charnum = charnum + 1; else if mid(input,i,1) = ' ' then set SortedName = concat(SortedName,' '); set charnum = 1; else set SortedName = concat(SortedName,mid(input,i,1)); set charnum = charnum + 1; end if; end if; SET i = i + 1; END WHILE; RETURN SortedName; END 

Aquí hay dos funciones útiles de Nicholas Thompson. Puede establecer la 3ª variable de UC_DELEMITER en falso, y la segunda en “” para la capitalización de más de una palabra.

UC_FIRST Capitalizar cualquier cadena dada: esta función es un clon de la función ucfirst en PHP.

 DROP FUNCTION IF EXISTS UC_FIRST; CREATE FUNCTION UC_FIRST(oldWord VARCHAR(255)) RETURNS VARCHAR(255) RETURN CONCAT(UCASE(SUBSTRING(oldWord, 1, 1)),SUBSTRING(oldWord, 2)); 

UC_DELIMITER Capitalizar con un delimitador entre palabras

 DROP FUNCTION IF EXISTS UC_DELIMITER; DELIMITER // CREATE FUNCTION UC_DELIMITER( oldName VARCHAR(255), delim VARCHAR(1), trimSpaces BOOL ) RETURNS VARCHAR(255) BEGIN SET @oldString := oldName; SET @newString := ""; tokenLoop: LOOP IF trimSpaces THEN SET @oldString := TRIM(BOTH " " FROM @oldString); END IF; SET @splitPoint := LOCATE(delim, @oldString); IF @splitPoint = 0 THEN SET @newString := CONCAT(@newString, UC_FIRST(@oldString)); LEAVE tokenLoop; END IF; SET @newString := CONCAT(@newString, UC_FIRST(SUBSTRING(@oldString, 1, @splitPoint))); SET @oldString := SUBSTRING(@oldString, @splitPoint+1); END LOOP tokenLoop; RETURN @newString; END// DELIMITER ; 

Ejemplos:

 SELECT UC_DELIMITER('eric-leroy','-',TRUE); Eric-Leroy 

Página web de la función

 DELIMITER $$ CREATE FUNCTION `capitalize`(s varchar(255)) RETURNS varchar(255) BEGIN declare c int; declare x varchar(255); declare y varchar(255); declare z varchar(255); set x = UPPER( SUBSTRING( s, 1, 1)); set y = lower(SUBSTR( s, 2)); set c = instr( y, ' '); while c > 0 do set z = SUBSTR( y, 1, c); set x = CONCAT( x, z); set z = UPPER( SUBSTR( y, c+1, 1)); set x = CONCAT( x, z); set y = SUBSTR( y, c+2); set c = INSTR( y, ' '); end while; set x = CONCAT(x, y); return x; END$$ DELIMITER ; Create above function to set First character to capital of each words 

La función correcta en Excel (o en las hojas de google hace exactamente lo que usted quiere).

Por lo tanto, exporte su tabla mysql como CSV y en Excel (o en hojas de google). Luego use el = Proper(*text_to_capitalize*) para poner en mayúscula la primera letra de cada palabra.

Luego simplemente exporte esa hoja de Excel como CSV de regreso a su base de datos.

Si está utilizando PHP, entonces …

 try{ $con = new PDO("mysql:host=localhost;dbname=dbasename", "root", ""); } catch(PDOException $e){ echo "error" . $e-getMessage(); } $select = $con->prepare("SELECT * FROM table"); $select->setFetchMode(PDO::FETCH_ASSOC); $select->execute(); while($data=$select->fetch()) { $id = $data['id']; $column = $data['column']; $column = ucwords(strtolower($column)); // Capitalize each word $update = $con->prepare("UPDATE table SET column=:column WHERE id='$id'"); $update->bindParam(':column', $column); $update->execute(); } 

en phpmyadmin, ejecute este UPDATE table_name SET Column_Name = LOWER(Column_Name) luego en la página html que muestra los datos de la tabla de la base de datos use css text-transform: capitalize;