Yanıtlar:
Neredeyse aynı, CONCAT () işlevini + operatörü yerine kullanmak için değiştirmeniz yeterlidir:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
SUBSTRING(CompanyIndustry, 2));
Bu açacak hello
kadar Hello
, wOrLd
için WOrLd
, BLABLA
için BLABLA
size büyük harf öğesine ilk harfini istiyorsanız, vb ve alt durum diğer, sadece kullanım lcase fonksiyonuna sahiptir:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
LCASE(SUBSTRING(CompanyIndustry, 2)));
UPPER ve UCASE'in aynı şeyi yaptığını unutmayın.
Büyük Harfli İlk Harf için mükemmel yanıt, sütun dizesinin tamamının yalnızca büyük harfle yazılması için harika çalışıyor .
AMA bir tablo sütununun dizelerindeki HER kelimenin İlk Harfini Büyük Harf haline getirmek isterseniz ne olur ?
örneğin: "Abbeville Lisesi"
Stackoverflow'da buna bir cevap bulamadım. Yukarıdaki örneğe sağlam bir çözüm sağlamak için Google'da bulduğum birkaç cevabı bir araya getirmek zorunda kaldım. Yerel bir işlev değil, MySQL sürüm 5+ izin verilen, kullanıcı tarafından oluşturulan bir işlev.
MySQL'de Süper / Yönetici kullanıcı durumunuz varsa veya kendi bilgisayarınızda yerel bir mysql kurulumunuz varsa, veritabanınızda bulunan ve gelecekteki tüm SQL sorgusunda kullanılabilecek bir FONKSİYON (saklı yordam gibi) oluşturabilirsiniz. db.
Oluşturduğum işlev, "UC_Words" adını verdiğim bu yeni işlevi, MySQL'in yerleşik yerel işlevleri gibi kullanmama izin veriyor, böylece tam bir sütunu şu şekilde güncelleyebilirim:
UPDATE Table_name
SET column_name = UC_Words(column_name)
İşlev kodunu eklemek için, işlevi oluştururken MySQL standart sınırlayıcısını (;) değiştirdim ve ardından işlev oluşturma betiğinden sonra normale döndürdüm. Ben de şahsen çıktının UTF8 CHARSET'te olmasını istedim.
İşlev oluşturma =
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 ;
Bu, bir dizedeki birden çok kelimede Büyük harfli ilk harflerin çıktısını veren bir işlemdir.
MySQL oturum açma kullanıcı adınızın yeterli ayrıcalıklara sahip olduğunu varsayarak - yoksa ve kişisel makinenizde tablolarınızı dönüştürmek için geçici bir DB ayarlayamazsınız, ardından paylaşılan barındırma sağlayıcınıza bu işlevi sizin için ayarlayıp ayarlamayacaklarını sorun.
CHARSET utf8_general_ci
CHARSET utf8
(en az 5.7'de) olarak değiştirilmelidir
Illegal mix of collations for operation 'concat'
bu yüzden sadece karakter kümesini düzeltin veya kaldırın ve varsayılan olarak yapın.
Sen bir arada kullanabilir UCASE()
, MID()
ve 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
Sütunda 1'den fazla kelime varsa, bu aşağıda gösterildiği gibi çalışmayacaktır. Yukarıda bahsedilen UDF bu durumda yardımcı olabilir.
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)
Ya da belki bu yardımcı olur ...
Bu güzel çalışıyor.
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))
Biri her kelimeyi boşluktan ayırarak büyük harf yapmaya çalışırsa ...
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;
Sonuç
+--------------+
| name |
+--------------+
| Abdul Karim |
+--------------+
Bu güzel çalışmalı:
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));
Yukarıdaki ifade ilk harf CAPS için kullanılabilir ve geri kalan küçük harf olarak kullanılabilir.
Uso algo assimi basitleştirir;)
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 ;