Jawaban:
Ini hampir sama, Anda hanya perlu mengubah untuk menggunakan fungsi CONCAT () alih-alih operator +:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
SUBSTRING(CompanyIndustry, 2));
Ini akan berubah hello
menjadi Hello
, wOrLd
ke WOrLd
, BLABLA
ke BLABLA
, dll. Jika Anda ingin menggunakan huruf besar pertama dan huruf kecil yang lain, Anda hanya perlu menggunakan fungsi LCASE:
UPDATE tb_Company
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)),
LCASE(SUBSTRING(CompanyIndustry, 2)));
Perhatikan bahwa UPPER dan UCASE melakukan hal yang sama.
Jawaban Vincents yang sangat baik untuk Huruf Pertama Huruf Besar berfungsi sangat baik untuk huruf pertama hanya kapitalisasi dari seluruh string kolom ..
TAPI bagaimana jika Anda ingin Huruf Besar Huruf Pertama dari SETIAP kata dalam string kolom tabel?
mis .: "Sekolah Menengah Abbeville"
Saya belum menemukan jawaban untuk ini di Stackoverflow. Saya harus mengumpulkan beberapa jawaban yang saya temukan di Google untuk memberikan solusi yang solid untuk contoh di atas. Ini bukan fungsi asli tetapi fungsi yang dibuat pengguna yang memungkinkan MySQL versi 5+.
Jika Anda memiliki status pengguna Super / Admin di MySQL atau memiliki instalasi mysql lokal di komputer Anda sendiri, Anda dapat membuat FUNCTION (seperti prosedur tersimpan) yang berada di database Anda dan dapat digunakan di semua kueri SQL di masa mendatang di bagian mana pun dari db.
Fungsi yang saya buat memungkinkan saya untuk menggunakan fungsi baru yang saya sebut "UC_Words" seperti fungsi bawaan MySQL sehingga saya dapat memperbarui kolom lengkap seperti ini:
UPDATE Table_name
SET column_name = UC_Words(column_name)
Untuk memasukkan kode fungsi, saya mengubah pembatas standar MySQL (;) saat membuat fungsi, dan kemudian mengatur ulang kembali ke normal setelah skrip pembuatan fungsi. Saya juga secara pribadi ingin hasilnya ada di UTF8 CHARSET juga.
Pembuatan fungsi =
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 ;
Ini berfungsi memperlakukan mengeluarkan huruf besar pertama pada beberapa kata dalam string.
Dengan asumsi nama pengguna login MySQL Anda memiliki hak yang cukup - jika tidak, dan Anda tidak dapat menyiapkan DB sementara di mesin pribadi Anda untuk mengonversi tabel Anda, tanyakan kepada penyedia hosting bersama apakah mereka akan mengatur fungsi ini untuk Anda.
CHARSET utf8_general_ci
harus diubah menjadi CHARSET utf8
(setidaknya pada 5.7)
Illegal mix of collations for operation 'concat'
jadi saya pikir cukup perbaiki charset atau hapus dan jadikan default.
Anda dapat menggunakan kombinasi dari UCASE()
, MID()
dan 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
Jika ada lebih dari 1 kata dalam kolom, maka ini tidak akan berfungsi seperti yang ditunjukkan di bawah ini. UDF yang disebutkan di atas dapat membantu dalam kasus seperti itu.
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)
Atau mungkin yang ini akan membantu ...
Ini bekerja dengan baik.
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))
Jika ada yang mencoba menggunakan huruf besar pada setiap kata yang dipisahkan oleh spasi ...
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;
Hasil
+--------------+
| name |
+--------------+
| Abdul Karim |
+--------------+
Ini seharusnya bekerja dengan baik:
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));
Pernyataan di atas dapat digunakan untuk CAPS huruf pertama dan sisanya sebagai huruf kecil.
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 ;