[MySQL] Erster Buchstabe groß rest klein

Steppo

Grünschnabel
Guten Morgen zusammen,

ich bin was MySQL angeht noch ein etwas unbeschriebenes Blatt und bin gerade damit beschäftigt mich intensiver damit auseinander zu setzen.

Ich versuche gerade sämtliche Inhalte einer Spalte so umzuformatieren, dass der Erste Buchstabe eines Wortes jeweils groß geschrieben ist und der rest dann klein.

Ich habe zumindest schon diesen Befehl hier gefunden womit ich alles klein oder mit UPPER groß bekomme.

SELECT meinespalte, LOWER(meinespalte)
FROM meinetabelle

ICh habe jetzt zwar noch andere anhaltspunkte gefunden aber das hat mich alles irgendwie nicht weitergebracht.

Über Hilfe wäre ich sehr dankbar.
 
Einen direkten Befehl ist mir grad nicht bekannt.
Aber mittels Substring, Upper und Lower sowie einem Concat am Schluss kriegt man das auch hin
SQL:
SELECT 
	CONCAT(
		UPPER(SUBSTRING(test.test, 1,1)),
		LOWER(SUBSTRING(test.test, 2))
	) AS myFormatedField
FROM test
 
Zuletzt bearbeitet von einem Moderator:
Hey,

erstmal Danke für die schnelle Antwort.

Es funktioniert auch wunderbar, allerdings habe ich mehrere Wörter in der Spalte stehen, wo jeweils der Erste Buchstabe groß sein soll.

Habe jetzt mal ein wenig herumgespielt um auch zu verstehen was da alles steht, habe auch versucht zu bestimmen indem ich den mittleren Teil einfach dupliziert habe und versucht habe zu sagen nimm das dritte Wort, erster Buchstabe usw...aber damit lieg wohl nicht so ganz richtig.

Als ich in der Zeile
Code:
UPPER(SUBSTRING(products_name, 1,1)),

die Zahlen verändert habe, wurde Text abgeschnitten und als ich es rückgängig gemacht habe, war der Rest wieder da. Wird das nur temporär ausgeblendet?
 
Nope. Lies mal die Doku zu SUBSTRING(). Dann weisst du warum

Die Doku habe ich mir nun zu gemüte gezogen und meine obrige Frage ist beantwortet, vielen Dank für den Hinweis.

Leider komme ich nicht weiter mit meinem Problem und würde nochmal Hilfe benötigen. Wie gesagt, ich habe mehrere Wörter in dem Feld und es soll bei jedem Wort der Erste Buchstabe groß geschreiben werden.

Ich habe jetzt zwar noch das hier http://joezack.com/index.php/2008/10/20/mysql-capitalize-function/gefunden, aber damit komme ich leider nicht klar.
 
Sooo...nochmal Hallo,

ersteinmal vielen Dank für die schnelle Hilfe und denkanstösse.

Ich habe nun endlich mein Ziel erreicht und hoffe, andere können damit ebenfalls was anfangen.

Erst muss eine Funktion erzeugt werden

Code:
DELIMITER ||
DROP FUNCTION IF EXISTS ucwords||
CREATE FUNCTION ucwords(s VARCHAR(255)) RETURNS VARCHAR(255) BEGIN
   DECLARE cont INT UNSIGNED DEFAULT 0;
   DECLARE flag TINYINT UNSIGNED DEFAULT 1;
   DECLARE cadena VARCHAR(255) DEFAULT '';
 
   WHILE(cont <= LENGTH(s)) DO
      IF(SUBSTRING(s,cont,1) = ' ') THEN
         SET cadena = CONCAT(cadena,' ');
         SET cont = cont + 1;
         SET flag = 1;
      ELSE
         SET flag = 0;
      END IF;
      IF flag = 1 THEN
         SET cadena = CONCAT(cadena,UCASE(SUBSTRING(s,cont,1)));
      ELSE
         SET cadena = CONCAT(cadena,LCASE(SUBSTRING(s,cont,1)));
      END IF;
      SET cont = cont + 1;
   END WHILE;
 
   RETURN LTRIM(cadena);
END;
||
DELIMITER ;

und diese Funktion ruft man über...auf
HTML:
UPDATE tabellennamen SET spaltennamen = ucwords(products_name)


Vielleicht hilft es ja dem ein oder anderen...

Originalquelle: http://www.elden.com.mx/2009/04/02/ucwords-for-mysql/
 
Zuletzt bearbeitet:
Ich hatte das gleiche Problem und die Funktion war schon sehr hilfreich. Allerdings hat sie noch ein paar Unschönheiten:

1.) Es wird nur nach einem Blank groß geschrieben. Ich wollte allerdings auch Großschreibung nach Komma, Slash und Bindestrich

2.) Wenn man zwei aufeinander folgende Zeichen hat, nach denen eigentlich groß geschrieben werden soll, funktioniert die Methode mit dem Flag nicht mehr, also aus 'ab cd' (zwei Blanks!) z.B. wird 'Ab cd'

Hier also meine geänderte Funktion (die auch noch ohne Flag auskommt):

Code:
DELIMITER ||
DROP FUNCTION IF EXISTS ucwords||
CREATE FUNCTION ucwords(s VARCHAR(255)) RETURNS VARCHAR(255) BEGIN

   DECLARE cont INT UNSIGNED DEFAULT 1;
   DECLARE cadena VARCHAR(255) DEFAULT '';

   WHILE(cont <= LENGTH(s)) DO
      IF(SUBSTRING(s,cont-1,1) IN (' ','/',',','-')) THEN
         SET cadena = CONCAT(cadena,UCASE(SUBSTRING(s,cont,1)));
      ELSE
         SET cadena = CONCAT(cadena,LCASE(SUBSTRING(s,cont,1)));
      END IF;
      SET cont = cont + 1;
   END WHILE;

   RETURN cadena;
END;
||
DELIMITER ;
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück