Normalmente los sistemas de programación y bases de datos nos proveen con una función relativamente simple cuya utilidad consiste en transformar la primera letra de una frase o palabra a mayúsculas, en php es ucfirst(), en Oracle es initcap (en el caso de transformar una frase, la función de Oracle pone cada primera palabra en mayúsculas), pero parece ser que MySQL no la tiene, por lo que tenemos que explorar un poco más y usar una solución más creativa. Pongamos como ejemplo esta frase:
mysql> SET @frase = 'bienvenidos a cambrico.net'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @frase; +----------------------------+ | @frase | +----------------------------+ | bienvenidos a cambrico.net | +----------------------------+ 1 row in set (0.00 sec)
Nota: He utilizado una variable de mysql con SET y @ para hacer las siguientes operaciones un poco mas simples. Tenemos funciones como UPPER/UCASE y LOWER/LCASE para transformar a mayúsculas o minúsculas la cadena:
mysql> SELECT UPPER(@frase); +----------------------------+ | UPPER(@frase) | +----------------------------+ | BIENVENIDOS A CAMBRICO.NET | +----------------------------+ 1 row in set (0.00 sec)
Y para obtener la primera letra de la cadena en mayúsculas podemos utilizar un encadenado de las siguientes funciones: LEFT, para tomar el primer caracter de la izquierda y SUBSTR para coger los restantes, de esta forma tenemos aislada la primera letra. Aplicamos UPPER para transformarla en mayúsculas y unimos la cadena de nuevo con CONCAT (si tenemos sql_mode en ANSI_QUOTES, podemos usar ||)
mysql> SELECT CONCAT(UPPER(LEFT(@frase,1)),SUBSTR(@frase,2)); +------------------------------------------------+ | CONCAT(UPPER(LEFT(@frase,1)),SUBSTR(@frase,2)) | +------------------------------------------------+ | Bienvenidos a cambrico.net | +------------------------------------------------+ 1 row in set (0.00 sec)
Actualizo: Para hacer lo que comenta Roberto, es decir, poner todas las palabras con la primera letra en mayúscula, tienes que hacer un procedimiento o una función (esto solo es posible a partir de MySQL 5.0). Os dejo un ejemplo:
DELIMITER // DROP FUNCTION IF EXISTS initcap; // CREATE FUNCTION initcap(cadena VARCHAR(100)) RETURNS VARCHAR(100) BEGIN DECLARE pos INT DEFAULT 0; DECLARE tmp VARCHAR(100) DEFAULT ''; DECLARE result VARCHAR(100) DEFAULT ''; REPEAT SET pos = LOCATE(' ', cadena); IF pos = 0 THEN SET pos = CHAR_LENGTH(cadena); END IF; SET tmp = LEFT(cadena,pos); SET result = CONCAT(result, UPPER(LEFT(tmp,1)),SUBSTR(tmp,2)); SET cadena = RIGHT(cadena,CHAR_LENGTH(cadena)-pos); UNTIL CHAR_LENGTH(cadena) = 0 END REPEAT; RETURN result; END; //
Y a partir de ahora, en la base de datos que hayamos creado la función, podremos utilizarla:
mysql> SELECT initcap(@frase); +----------------------------+ | initcap(@frase) | +----------------------------+ | Bienvenidos A Cambrico.net | +----------------------------+ 1 row in set (0.00 sec)
Con una pequeña modificación de la función anterior, podemos filtrar las palabras de menos de 4 caracteres (por ejemplo), para no poner en mayúsculas la mayoría de conectores:
DELIMITER // DROP FUNCTION IF EXISTS initcap; // CREATE FUNCTION initcap(cadena VARCHAR(100)) RETURNS VARCHAR(100) BEGIN DECLARE pos INT DEFAULT 0; DECLARE tmp VARCHAR(100) DEFAULT ''; DECLARE result VARCHAR(100) DEFAULT ''; REPEAT SET pos = LOCATE(' ', cadena); IF pos = 0 THEN SET pos = CHAR_LENGTH(cadena); END IF; SET tmp = LEFT(cadena,pos); IF CHAR_LENGTH(tmp) < 4 THEN SET result = CONCAT(result, tmp); ELSE SET result = CONCAT(result, UPPER(LEFT(tmp,1)),SUBSTR(tmp,2)); END IF; SET cadena = RIGHT(cadena,CHAR_LENGTH(cadena)-pos); UNTIL CHAR_LENGTH(cadena) = 0 END REPEAT; RETURN result; END; //
Y el resultado sería ligeramente distinto:
mysql> SELECT initcap(@frase); +----------------------------+ | initcap(@frase) | +----------------------------+ | Bienvenidos a Cambrico.net | +----------------------------+ 1 row in set (0.00 sec)