Respostas:
É quase o mesmo, você só precisa mudar para usar a função CONCAT () em vez do operador +:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
SUBSTRING(CompanyIndustry, 2));
Isso mudaria hello
para Hello
, wOrLd
para WOrLd
, BLABLA
para BLABLA
, etc. Se você quiser maiúsculas a primeira letra e minúsculas a outra, você só precisa usar a função LCASE:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
LCASE(SUBSTRING(CompanyIndustry, 2)));
Observe que UPPER e UCASE fazem a mesma coisa.
A excelente resposta da Vincents para a primeira letra maiúscula funciona muito bem para a primeira letra apenas em maiúscula de uma string de coluna inteira.
MAS e se você quiser maiúscula a primeira letra de CADA palavra nas strings de uma coluna da tabela?
por exemplo: "Abbeville High School"
Eu não tinha encontrado uma resposta para isso no Stackoverflow. Tive de juntar algumas respostas que encontrei no Google para fornecer uma solução sólida para o exemplo acima. Não é uma função nativa, mas uma função criada pelo usuário que o MySQL versão 5+ permite.
Se você tem status de usuário Super / Admin no MySQL ou tem uma instalação local do mysql em seu próprio computador, você pode criar uma FUNÇÃO (como um procedimento armazenado) que fica em seu banco de dados e pode ser usado em todas as consultas SQL futuras em qualquer parte do db.
A função que criei me permite usar esta nova função que chamei de "UC_Words", assim como as funções nativas integradas do MySQL para que eu possa atualizar uma coluna completa como esta:
UPDATE Table_name
SET column_name = UC_Words(column_name)
Para inserir o código da função, alterei o delimitador padrão do MySQL (;) enquanto criava a função e, em seguida, redefini-lo ao normal após o script de criação da função. Eu também queria que a saída fosse em UTF8 CHARSET.
Criação de função =
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 ;
Isso funciona como um tratamento para a saída de primeiras letras maiúsculas em várias palavras em uma string.
Assumindo que seu nome de usuário de login do MySQL tem privilégios suficientes - se não, e você não pode configurar um banco de dados temporário em sua máquina pessoal para converter suas tabelas, pergunte ao seu provedor de hospedagem compartilhada se ele definirá esta função para você.
CHARSET utf8_general_ci
deve ser alterado para CHARSET utf8
(pelo menos em 5,7)
Illegal mix of collations for operation 'concat'
então eu acho que apenas consertar o conjunto de caracteres ou removê-lo e torná-lo padrão.
Você pode usar uma combinação de UCASE()
, MID()
e 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
Se houver mais de 1 palavra na coluna, isso não funcionará conforme mostrado abaixo. A UDF mencionada acima pode ajudar nesse 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)
Ou talvez este ajude ...
Isso está funcionando bem.
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))
Se alguém tentar capitalizar cada palavra, separar por espaço ...
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 |
+--------------+
Isso deve funcionar bem:
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));
A afirmação acima pode ser usada para a primeira letra em CAPS e as restantes como minúsculas.
Uso algo simples 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 ;