Großbuchstaben schreiben. MySQL


110

Kennt jemand das Äquivalent zu dieser TSQL im MySQL-Sprachgebrauch?

Ich versuche, den ersten Buchstaben jedes Eintrags groß zu schreiben.

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

Antworten:


275

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 hellozu Hello, wOrLdzu WOrLd, BLABLAzu BLABLAusw. 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.


1
danke - das hat getan was ich brauchte. Ich habe vergessen zu erwähnen, dass ich zuerst Kleinbuchstaben einstellen musste. danke
Chin

55

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.


4
CHARSET utf8_general_cisollte geändert werden zu CHARSET utf8(mindestens am 5.7)
Manuel

@ManuelDallaLana Eigentlich könnte man einen Fehler bekommen, Illegal mix of collations for operation 'concat'also denke ich , korrigiere einfach den Zeichensatz oder entferne ihn und mache ihn auf Standard.
Al-Mothafar

@Alejandro Diese Antwort schreibt den ersten Buchstaben jedes Wortes in der Zeichenfolge groß. Die Frage und die akzeptierte Antwort schreiben nur den ersten Buchstaben in der Zeichenfolge groß. Sie sind beide super hilfreiche Antworten, aber für verschiedene Anwendungsfälle.
Liam

Es liegt ein Fehler vor. Sie müssen 's' mit dem Zeichensatz "DECLARE s VARCHAR (255) CHARSET utf8;" deklarieren. oder Sie verlieren einige Zeichen. Trotzdem danke für diese Lösung :-)
Jérôme Herry

Und auch 'c': "DECLARE c CHAR (1) CHARSET utf8;"
Jérôme Herry

17

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;

Dies senkt nicht alle anderen Buchstaben. Versuchen SieSELECT 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

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

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


2

Das funktioniert gut.

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

Ich habe nur versucht, die UCASE-Funktion in MySQL hervorzuheben: P :)
Jasdeep Singh

1

FUNKTION ERSTELLEN:

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

BENUTZEN SIE DIE FUNKTION

UPDATE tbl_name SET col_name = UC_FIRST(col_name);

1

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

0

Das sollte gut funktionieren:

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

Die obige Anweisung kann für Großbuchstaben CAPS und Rest als Kleinbuchstaben verwendet werden.


-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 ;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.