Antworten:
Es ist fast dasselbe, Sie müssen nur ändern, um die CONCAT () -Funktion anstelle des Operators + zu verwenden:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
SUBSTRING(CompanyIndustry, 2));
Dies würde sich hello
zu Hello
, wOrLd
zu WOrLd
, BLABLA
zu BLABLA
usw. wenden . Wenn Sie den ersten Buchstaben in Großbuchstaben und den anderen in Kleinbuchstaben schreiben möchten, müssen Sie nur die LCASE-Funktion verwenden:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
LCASE(SUBSTRING(CompanyIndustry, 2)));
Beachten Sie, dass UPPER und UCASE dasselbe tun.
Vincents ausgezeichnete Antwort für Versalien ersten Brief funktioniert gut für die ersten Buchstaben nur Kapitalisierung einer ganzen Spalte String ..
ABER was ist, wenn Sie den ersten Buchstaben JEDES Wortes in den Zeichenfolgen einer Tabellenspalte in Großbuchstaben schreiben möchten ?
zB: "Abbeville High School"
Ich hatte in Stackoverflow keine Antwort darauf gefunden. Ich musste ein paar Antworten zusammenschustern, die ich in Google gefunden hatte, um eine solide Lösung für das obige Beispiel zu finden. Es ist keine native Funktion, sondern eine vom Benutzer erstellte Funktion, die MySQL Version 5+ zulässt.
Wenn Sie einen Super / Admin-Benutzerstatus unter MySQL haben oder eine lokale MySQL-Installation auf Ihrem eigenen Computer haben, können Sie eine FUNKTION (wie eine gespeicherte Prozedur) erstellen, die sich in Ihrer Datenbank befindet und in allen zukünftigen SQL-Abfragen auf jedem Teil der Datenbank verwendet werden kann db.
Mit der von mir erstellten Funktion kann ich diese neue Funktion, die ich "UC_Words" genannt habe, genau wie die integrierten nativen Funktionen von MySQL verwenden, um eine vollständige Spalte wie diese zu aktualisieren:
UPDATE Table_name
SET column_name = UC_Words(column_name)
Um den Funktionscode einzufügen, habe ich beim Erstellen der Funktion das MySQL-Standardtrennzeichen (;) geändert und es nach dem Skript zur Funktionserstellung wieder auf den Normalwert zurückgesetzt. Ich persönlich wollte auch, dass die Ausgabe auch in UTF8 CHARSET erfolgt.
Funktionserstellung =
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 ;
Dies ist ein Vergnügen, wenn Sie Großbuchstaben für mehrere Wörter in einer Zeichenfolge ausgeben.
Angenommen, Ihr MySQL-Login-Benutzername verfügt über ausreichende Berechtigungen. Wenn dies nicht der Fall ist und Sie auf Ihrem PC keine temporäre Datenbank zum Konvertieren Ihrer Tabellen einrichten können, fragen Sie Ihren Shared Hosting-Anbieter, ob diese Funktion für Sie festgelegt wird.
CHARSET utf8_general_ci
sollte geändert werden zu CHARSET utf8
(mindestens am 5.7)
Illegal mix of collations for operation 'concat'
also denke ich , korrigiere einfach den Zeichensatz oder entferne ihn und mache ihn auf Standard.
Sie können eine Kombination von verwenden UCASE()
, MID()
und 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
Wenn die Spalte mehr als ein Wort enthält, funktioniert dies nicht wie unten gezeigt. Die oben erwähnte UDF kann in einem solchen Fall helfen.
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)
Oder vielleicht hilft dieser ...
Das funktioniert gut.
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))
Wenn jemand versucht, jedes Wort durch Leerzeichen getrennt zu schreiben ...
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;
Ergebnis
+--------------+
| name |
+--------------+
| Abdul Karim |
+--------------+
Das sollte gut funktionieren:
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));
Die obige Anweisung kann für Großbuchstaben CAPS und Rest als Kleinbuchstaben verwendet werden.
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 ;