minusculas - MySQL-Escriba en mayúscula la primera letra de cada palabra, en la tabla existente
sql no distinguir mayusculas (9)
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 ''^[a-z]'';
¿Cómo puedo capitalizar la primera letra de cada palabra encontrada? por ejemplo, ''fred jones''
convierte en ''Fred Jones''
.
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
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.
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);
Probé el código desde arriba, pero tenía errores de sintaxis 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
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);
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();
}
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'');
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;
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