Kapitalkan huruf pertama. MySQL

110

Apakah ada yang tahu yang setara dengan TSQL ini dalam bahasa MySQL?

Saya mencoba menggunakan huruf besar pada huruf pertama dari setiap entri.

UPDATE tb_Company SET CompanyIndustry = UPPER(LEFT(CompanyIndustry, 1))
+ SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))
Dagu
sumber

Jawaban:

275

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 hellomenjadi Hello, wOrLdke WOrLd, BLABLAke 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.

Vincent Savard
sumber
1
terima kasih - itu melakukan apa yang saya butuhkan. Saya lupa menyebutkan bahwa saya perlu mengatur ke huruf kecil terlebih dahulu. terima kasih
Chin
55

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.

Martin Sansone - MiOEE
sumber
4
CHARSET utf8_general_ciharus diubah menjadi CHARSET utf8(setidaknya pada 5.7)
Manuel
@ManuelDallaLana sebenarnya Anda bisa mendapatkan kesalahan Illegal mix of collations for operation 'concat'jadi saya pikir cukup perbaiki charset atau hapus dan jadikan default.
Al-Mothafar
@Alejandro Jawaban ini menggunakan huruf besar pada huruf pertama dari setiap kata dalam string. Pertanyaan dan jawaban yang diterima hanya menggunakan huruf besar di huruf pertama dalam string. Keduanya adalah jawaban yang sangat membantu tetapi untuk kasus penggunaan yang berbeda.
Liam
Terjadi error, Anda harus mendeklarasikan 's' dengan charset "DECLARE s VARCHAR (255) CHARSET utf8;" atau Anda akan kehilangan beberapa karakter. Terima kasih untuk solusi ini :-)
Jérôme Herry
Dan juga 'c': "DECLARE c CHAR (1) CHARSET utf8;"
Jérôme Herry
17

Anda dapat menggunakan kombinasi dari UCASE(), MID()dan CONCAT():

SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;
Wouter Dorgelo
sumber
ini tidak menurunkan semua huruf lainnya. CobaSELECT CONCAT(UCASE(MID('TEST',1,1)),MID('TEST',2));
vladkras
8
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

Akar
sumber
5

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 ...

https://github.com/mysqludf/lib_mysqludf_str#str_ucwords

shantanuo
sumber
2

Ini bekerja dengan baik.

UPDATE state SET name = CONCAT(UCASE(LEFT(name, 1)), LCASE(SUBSTRING(name, 2)));
Abhinav Sahu
sumber
1
UPDATE tb_Company SET CompanyIndustry = UCASE(LEFT(CompanyIndustry, 1)) + 
SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))
Jasdeep Singh
sumber
saya baru saja mencoba menyorot fungsi UCASE di MySQL: P :)
Jasdeep Singh
1

BUAT FUNGSI:

CREATE DEFINER=`root`@`localhost` FUNCTION `UC_FIRST`(`oldWord` VARCHAR(255)) 

RETURNS varchar(255) CHARSET utf8

RETURN CONCAT( UCASE( LEFT(oldWord, 1)), LCASE(SUBSTRING(oldWord, 2)))

GUNAKAN FUNGSI

UPDATE tbl_name SET col_name = UC_FIRST(col_name);
Florin
sumber
1

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  | 
+--------------+
Jahir islam
sumber
0

Ini seharusnya bekerja dengan baik:

UPDATE tb_Company SET CompanyIndustry = 
CONCAT(UPPER(LEFT(CompanyIndustry, 1)), SUBSTRING(CompanyIndustry, 2))
Chris Hutchinson
sumber
0
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)));
sandeep kumar
sumber
0
 select  CONCAT(UCASE(LEFT('CHRIS', 1)),SUBSTRING(lower('CHRIS'),2));

Pernyataan di atas dapat digunakan untuk CAPS huruf pertama dan sisanya sebagai huruf kecil.

Aamir Khan
sumber
-1

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 ;
Hton
sumber