Risposte:
È quasi la stessa cosa, devi solo cambiare per usare la funzione CONCAT () invece dell'operatore +:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
SUBSTRING(CompanyIndustry, 2));
Questo si trasformerebbe hello
in Hello
, wOrLd
in WOrLd
, BLABLA
in BLABLA
, ecc. Se vuoi mettere in maiuscolo la prima lettera e in minuscolo l'altra, devi solo usare la funzione LCASE:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
LCASE(SUBSTRING(CompanyIndustry, 2)));
Nota che UPPER e UCASE fanno la stessa cosa.
Vincents risposta eccellente per maiuscole Prima Lettera grandi opere per la prima lettera unica capitalizzazione di un'intera stringa di colonna ..
MA cosa succede se si desidera mettere in maiuscolo la prima lettera di OGNI parola nelle stringhe di una colonna della tabella?
ad esempio: "Abbeville High School"
Non avevo trovato una risposta a questo in Stackoverflow. Ho dovuto mettere insieme alcune risposte che ho trovato su Google per fornire una soluzione solida all'esempio precedente. Non è una funzione nativa ma una funzione creata dall'utente consentita da MySQL versione 5+.
Se hai lo stato di utente Super / Admin su MySQL o hai un'installazione mysql locale sul tuo computer puoi creare una FUNZIONE (come una procedura memorizzata) che risiede nel tuo database e può essere utilizzata in tutte le future query SQL su qualsiasi parte del db.
La funzione che ho creato mi permette di utilizzare questa nuova funzione che ho chiamato "UC_Words" proprio come le funzioni native di MySQL in modo da poter aggiornare una colonna completa come questa:
UPDATE Table_name
SET column_name = UC_Words(column_name)
Per inserire il codice della funzione, ho cambiato il delimitatore standard di MySQL (;) durante la creazione della funzione, quindi l'ho ripristinato alla normalità dopo lo script di creazione della funzione. Personalmente volevo anche che l'output fosse in UTF8 CHARSET.
Creazione della funzione =
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 ;
Funziona a meraviglia quando si emettono le prime lettere maiuscole su più parole all'interno di una stringa.
Supponendo che il tuo nome utente di accesso MySQL abbia privilegi sufficienti, in caso contrario e non puoi impostare un DB temporaneo sulla tua macchina personale per convertire le tue tabelle, chiedi al tuo provider di hosting condiviso se imposterà questa funzione per te.
CHARSET utf8_general_ci
dovrebbe essere cambiato in CHARSET utf8
(almeno il 5.7)
Illegal mix of collations for operation 'concat'
quindi penso che correggi il set di caratteri o rimuovilo e impostalo come predefinito.
È possibile utilizzare una combinazione di 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 ci sono più di 1 parola nella colonna, non funzionerà come mostrato di seguito. L'UDF di cui sopra può aiutare in questo 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 forse questo ti aiuterà ...
Funziona bene.
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 qualcuno cerca di scrivere in maiuscolo ogni parola separata dallo spazio ...
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;
Risultato
+--------------+
| name |
+--------------+
| Abdul Karim |
+--------------+
Questo dovrebbe funzionare bene:
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));
L'istruzione sopra può essere utilizzata per la prima lettera MAIUSC e il resto come minuscolo.
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 ;