Respuestas:
Es casi lo mismo, solo tienes que cambiar para usar la función CONCAT () en lugar del operador +:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
SUBSTRING(CompanyIndustry, 2));
Esto cambiaría hello
a Hello
, wOrLd
a WOrLd
, BLABLA
a BLABLA
, etc. Si desea poner en mayúsculas la primera letra y en minúsculas la otra, solo tiene que usar la función LCASE:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
LCASE(SUBSTRING(CompanyIndustry, 2)));
Tenga en cuenta que UPPER y UCASE hacen lo mismo.
Vincent excelente respuesta para mayúsculas Primera Carta funciona muy bien para la primera letra única capitalización de una cadena columna entera ..
PERO, ¿qué pasa si quieres poner en mayúsculas la primera letra de CADA palabra? en las cadenas de una columna de la tabla?
por ejemplo: "Abbeville High School"
No había encontrado una respuesta a esto en Stackoverflow. Tuve que improvisar algunas respuestas que encontré en Google para proporcionar una solución sólida al ejemplo anterior. No es una función nativa, sino una función creada por el usuario que permite MySQL versión 5+.
Si tiene un estado de usuario Super / Admin en MySQL o tiene una instalación local de mysql en su propia computadora, puede crear una FUNCIÓN (como un procedimiento almacenado) que se encuentra en su base de datos y se puede usar en todas las consultas SQL futuras en cualquier parte del db.
La función que creé me permite usar esta nueva función que llamé "UC_Words" al igual que las funciones nativas integradas de MySQL para poder actualizar una columna completa como esta:
UPDATE Table_name
SET column_name = UC_Words(column_name)
Para insertar el código de la función, cambié el delimitador estándar de MySQL (;) mientras creaba la función, y luego lo restablecí a la normalidad después del script de creación de la función. También personalmente quería que la salida estuviera en UTF8 CHARSET.
Creación de función =
DELIMITER ||
CREATE FUNCTION `UC_Words`( str VARCHAR(255) ) RETURNS VARCHAR(255) CHARSET utf8 DETERMINISTIC
BEGIN
DECLARE c CHAR(1);
DECLARE s VARCHAR(255);
DECLARE i INT DEFAULT 1;
DECLARE bool INT DEFAULT 1;
DECLARE punct CHAR(17) DEFAULT ' ()[]{},.-_!@;:?/';
SET s = LCASE( str );
WHILE i < LENGTH( str ) DO
BEGIN
SET c = SUBSTRING( s, i, 1 );
IF LOCATE( c, punct ) > 0 THEN
SET bool = 1;
ELSEIF bool=1 THEN
BEGIN
IF c >= 'a' AND c <= 'z' THEN
BEGIN
SET s = CONCAT(LEFT(s,i-1),UCASE(c),SUBSTRING(s,i+1));
SET bool = 0;
END;
ELSEIF c >= '0' AND c <= '9' THEN
SET bool = 0;
END IF;
END;
END IF;
SET i = i+1;
END;
END WHILE;
RETURN s;
END ||
DELIMITER ;
Esto funciona de maravilla al generar primeras letras mayúsculas en varias palabras dentro de una cadena.
Suponiendo que su nombre de usuario de inicio de sesión de MySQL tiene suficientes privilegios, si no es así, y no puede configurar una base de datos temporal en su máquina personal para convertir sus tablas, pregúntele a su proveedor de alojamiento compartido si establecerá esta función por usted.
CHARSET utf8_general_ci
debe cambiarse a CHARSET utf8
(al menos el 5.7)
Illegal mix of collations for operation 'concat'
así que creo que simplemente corrija el juego de caracteres o elimínelo y configúrelo como predeterminado.
Se puede utilizar una combinación de UCASE()
, MID()
y CONCAT()
:
SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;
SELECT CONCAT(UCASE(MID('TEST',1,1)),MID('TEST',2));
mysql> SELECT schedule_type AS Schedule FROM ad_campaign limit 1;
+----------+
| Schedule |
+----------+
| ENDDATE |
+----------+
1 row in set (0.00 sec)
mysql> SELECT CONCAT(UCASE(MID(schedule_type,1,1)),LCASE(MID(schedule_type,2))) AS Schedule FROM ad_campaign limit 1;
+----------+
| Schedule |
+----------+
| Enddate |
+----------+
1 row in set (0.00 sec)
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_mid
http://forge.mysql.com/tools/tool.php?id=201
Si hay más de 1 palabra en la columna, esto no funcionará como se muestra a continuación. La UDF mencionada anteriormente puede ayudar en tal caso.
mysql> select * from names;
+--------------+
| name |
+--------------+
| john abraham |
+--------------+
1 row in set (0.00 sec)
mysql> SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;
+--------------+
| name |
+--------------+
| John abraham |
+--------------+
1 row in set (0.00 sec)
O tal vez este ayude ...
Esto está funcionando muy bien.
UPDATE state SET name = CONCAT(UCASE(LEFT(name, 1)), LCASE(SUBSTRING(name, 2)));
UPDATE tb_Company SET CompanyIndustry = UCASE(LEFT(CompanyIndustry, 1)) +
SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))
Si alguien intenta poner en mayúscula cada palabra separada por espacio ...
CREATE FUNCTION response(name VARCHAR(40)) RETURNS VARCHAR(200) DETERMINISTIC
BEGIN
set @m='';
set @c=0;
set @l=1;
while @c <= char_length(name)-char_length(replace(name,' ','')) do
set @c = @c+1;
set @p = SUBSTRING_INDEX(name,' ',@c);
set @k = substring(name,@l,char_length(@p)-@l+1);
set @l = char_length(@k)+2;
set @m = concat(@m,ucase(left(@k,1)),lcase(substring(@k,2)),' ');
end while;
return trim(@m);
END;
CREATE PROCEDURE updateNames()
BEGIN
SELECT response(name) AS name FROM names;
END;
Resultado
+--------------+
| name |
+--------------+
| Abdul Karim |
+--------------+
Esto debería funcionar bien:
UPDATE tb_Company SET CompanyIndustry =
CONCAT(UPPER(LEFT(CompanyIndustry, 1)), SUBSTRING(CompanyIndustry, 2))
UPDATE users
SET first_name = CONCAT(UCASE(LEFT(first_name, 1)),
LCASE(SUBSTRING(first_name, 2)))
,last_name = CONCAT(UCASE(LEFT(last_name, 1)),
LCASE(SUBSTRING(last_name, 2)));
select CONCAT(UCASE(LEFT('CHRIS', 1)),SUBSTRING(lower('CHRIS'),2));
La declaración anterior se puede utilizar para la primera letra MAYÚSCULAS y el resto como minúsculas.
Uso algo simple assim;)
DELIMITER $$
DROP FUNCTION IF EXISTS `uc_frist` $$
CREATE FUNCTION `uc_frist` (str VARCHAR(200)) RETURNS varchar(200)
BEGIN
set str:= lcase(str);
set str:= CONCAT(UCASE(LEFT(str, 1)),SUBSTRING(str, 2));
set str:= REPLACE(str, ' a', ' A');
set str:= REPLACE(str, ' b', ' B');
set str:= REPLACE(str, ' c', ' C');
set str:= REPLACE(str, ' d', ' D');
set str:= REPLACE(str, ' e', ' E');
set str:= REPLACE(str, ' f', ' F');
set str:= REPLACE(str, ' g', ' G');
set str:= REPLACE(str, ' h', ' H');
set str:= REPLACE(str, ' i', ' I');
set str:= REPLACE(str, ' j', ' J');
set str:= REPLACE(str, ' k', ' K');
set str:= REPLACE(str, ' l', ' L');
set str:= REPLACE(str, ' m', ' M');
set str:= REPLACE(str, ' n', ' N');
set str:= REPLACE(str, ' o', ' O');
set str:= REPLACE(str, ' p', ' P');
set str:= REPLACE(str, ' q', ' Q');
set str:= REPLACE(str, ' r', ' R');
set str:= REPLACE(str, ' s', ' S');
set str:= REPLACE(str, ' t', ' T');
set str:= REPLACE(str, ' u', ' U');
set str:= REPLACE(str, ' v', ' V');
set str:= REPLACE(str, ' w', ' W');
set str:= REPLACE(str, ' x', ' X');
set str:= REPLACE(str, ' y', ' Y');
set str:= REPLACE(str, ' z', ' Z');
return str;
END $$
DELIMITER ;