2010-11-24 10 views
78

Kennt jemand das Äquivalent zu diesem TSQL im MySQL-Sprachgebrauch?Großbuchstaben Anfangsbuchstaben. MySQL

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

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

Antwort

194

Es ist fast das gleiche, man muss nur die CONCAT zu verwenden, ändern() -Funktion statt der + Operator:

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

Dies würde hello zu 012 drehen, wOrLd-WOrLd, BLABLA-BLABLA, etc. Wenn Sie Großbuchstaben wollen den ersten Buchstaben und Klein das andere, man muss nur LCASE Funktion verwenden:

UPDATE tb_Company 
SET CompanyIndustry = CONCAT(UCASE(LEFT(CompanyIndustry, 1)), 
          LCASE(SUBSTRING(CompanyIndustry, 2))); 

Beachten Sie, dass obere und UCASE tun das gleiche.

+1

danke - das tat, was ich brauchte. Ich habe vergessen zu erwähnen, dass ich zuerst auf Kleinbuchstaben setzen musste. danke – Chin

16

Sie können eine Kombination von UCASE(), MID() verwenden und CONCAT():

SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names; 
1
UPDATE tb_Company SET CompanyIndustry = UCASE(LEFT(CompanyIndustry, 1)) + 
SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry)) 
+1

Dies würde nicht funktionieren, + ist nicht der Concat-Operator mit MySQL. –

+1

die Antwort von Enrico Pallazzo sollte gut funktionieren –

+0

Ich habe nur versucht, die UCASE-Funktion in MySQL zu markieren: P :) –

0

Dies sollte gut funktionieren:

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

http://forge.mysql.com/tools/tool.php?id=201

Wenn es mehr als 1 Wort in der Spalte, dann wird dies nicht als unten arbeiten. Die oben erwähnte UDF kann in diesem 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 wird dieses helfen ...

http://www.mysqludf.org/lib_mysqludf_str/index.php#str_ucwords

7
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

2

Das ist schön zu arbeiten.

UPDATE Zustand gesetzt name = CONCAT (UCASE (LEFT (name, 1)), LCASE (SUBSTRING (Name, 2)));

30

Vincents ausgezeichnete Antwort für Versalien Erste Schreiben funktioniert gut für den ersten Buchstaben nur Kapitalisierung einer ganzen Spalte Zeichenfolge ..

aber was, wenn Sie den ersten Buchstaben jedes Wortes in Großbuchstaben wollen in den Strings einer Tabellenspalte?

zB: "Abbeville High School"

ich keine Antwort auf diese in Stackoverflow gefunden hatten. Ich musste einige Antworten, die ich in Google gefunden hatte, zusammenfügen, um eine solide Lösung für das obige Beispiel zu bieten. Es ist keine native Funktion, sondern eine vom Benutzer erstellte Funktion, die MySQL Version 5+ erlaubt.

Wenn Sie Super/Admin-Benutzerstatus auf MySQL haben oder eine lokale mysql-Installation auf Ihrem eigenen Computer haben, können Sie eine FUNCTION (wie eine gespeicherte Prozedur) erstellen, die in Ihrer Datenbank gespeichert ist und in allen zukünftigen SQL-Abfragen verwendet werden kann irgendein Teil der db.

Die Funktion Ich habe mir erlaubt, diese neue Funktion zu verwenden I „UC_Words“ wie die eingebaute native Funktionen von MySQL genannt, so dass ich eine komplette Spalte wie folgt aktualisieren:

UPDATE Table_name 
SET column_name = UC_Words(column_name) 

Zum Einfügen der Funktionscode, ich habe das MySQL-Standard-Delimiterzeichen (;) während der Erstellung der Funktion geändert und es dann nach dem Funktionserstellungsskript wieder auf normal zurückgesetzt. Ich wollte auch, dass die Ausgabe auch in UTF8 CHARSET ist.

Funktion Schöpfung =

DELIMITER || 

CREATE FUNCTION `UC_Words`(str VARCHAR(255)) RETURNS VARCHAR(255) CHARSET utf8_general_ci 
BEGIN 
    DECLARE c CHAR(1); 
    DECLARE s VARCHAR(255); 
    DECLARE i INT DEFAULT 1; 
    DECLARE bool INT DEFAULT 1; 
    DECLARE punct CHAR(17) DEFAULT '()[]{},[email protected];:?/'; 
    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 funktioniert eine Behandlung in einem String Versalien- ersten Buchstaben auf mehrere Wörter ausgibt.

Angenommen, Ihr MySQL-Benutzername hat ausreichende Berechtigungen - wenn nicht, und Sie können keine temporäre DB auf Ihrem persönlichen Rechner einrichten, um Ihre Tabellen zu konvertieren, dann fragen Sie Ihren Shared-Hosting-Anbieter, ob er diese Funktion für Sie einstellen wird.

+3

'CHARSET utf8_general_ci' sollte in' CHARSET utf8' geändert werden (mindestens 5.7) –

1

Erstellen Sie eine Funktion:

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

verwenden Sie die Funktion

UPDATE tbl_name SET col_name = UC_FIRST(col_name); 
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))); 
Verwandte Themen