İlk harfi büyük yazın. MySQL


110

MySQL tabiriyle bu TSQL'in eşdeğerini bilen var mı?

Her girişin ilk harfini büyük harf yapmaya çalışıyorum.

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

Yanıtlar:


275

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 hellokadar Hello, wOrLdiçin WOrLd, BLABLAiçin BLABLAsize 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.


1
teşekkürler - ihtiyacım olanı yaptı. Önce küçük harfe ayarlamam gerektiğini söylemeyi unuttum. teşekkürler
Chin

55

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.


4
CHARSET utf8_general_ciCHARSET utf8(en az 5.7'de) olarak değiştirilmelidir
Manuel

@ManuelDallaLana aslında hata alabilirsiniz, 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.
Al-Mothafar

@Alejandro Bu yanıt, dizedeki her kelimenin ilk harfini büyük yapar. Soru ve kabul edilen yanıt dizedeki yalnızca ilk harfi büyük yapar. Her ikisi de süper yardımcı yanıtlardır, ancak farklı kullanım durumları içindir.
Liam

Bir hata var, 's' karakter setiyle "DECLARE s VARCHAR (255) CHARSET utf8;" yoksa bazı karakterleri kaybedersiniz. Yine de bu çözüm için teşekkürler :-)
Jérôme Herry

Ve ayrıca 'c': "DECLARE c CHAR (1) CHARSET utf8;"
Jérôme Herry

17

Sen bir arada kullanabilir UCASE(), MID()ve CONCAT():

SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;

bu diğer tüm harfleri düşürmez. DeneyinSELECT 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


5

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

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


2

Bu güzel çalışıyor.

UPDATE state SET name = CONCAT(UCASE(LEFT(name, 1)), LCASE(SUBSTRING(name, 2)));

1
UPDATE tb_Company SET CompanyIndustry = UCASE(LEFT(CompanyIndustry, 1)) + 
SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))

MySQL'de UCASE işlevini vurgulamaya çalışıyordum: P :)
Jasdeep Singh

1

BİR FONKSİYON OLUŞTURUN:

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

FONKSİYONU KULLANIN

UPDATE tbl_name SET col_name = UC_FIRST(col_name);

1

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

0

Bu güzel çalışmalı:

UPDATE tb_Company SET CompanyIndustry = 
CONCAT(UPPER(LEFT(CompanyIndustry, 1)), SUBSTRING(CompanyIndustry, 2))

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)));

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


-1

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 ;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.