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

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.

Vincent Savard
quelle
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.

Martin Sansone - MiOEE
quelle
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;
Wouter Dorgelo
quelle
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

Wurzel
quelle
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

Shantanuo
quelle
2

Das funktioniert gut.

UPDATE state SET name = CONCAT(UCASE(LEFT(name, 1)), LCASE(SUBSTRING(name, 2)));
Abhinav Sahu
quelle
1
UPDATE tb_Company SET CompanyIndustry = UCASE(LEFT(CompanyIndustry, 1)) + 
SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))
Jasdeep Singh
quelle
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);
Gulden
quelle
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  | 
+--------------+
Jahir Islam
quelle
0

Das sollte gut funktionieren:

UPDATE tb_Company SET CompanyIndustry = 
CONCAT(UPPER(LEFT(CompanyIndustry, 1)), SUBSTRING(CompanyIndustry, 2))
Chris Hutchinson
quelle
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
quelle
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.

Aamir Khan
quelle
-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
quelle