2010-11-24 161 views
78

¿Alguien sabe el equivalente a este TSQL en el lenguaje de MySQL?Poner en mayúscula la primera letra. MySQL

Estoy tratando de poner en mayúscula la primera letra de cada entrada.

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

Respuesta

194

Es casi lo mismo, sólo hay que cambiar para utilizar el CONCAT() función en lugar del + operador:

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

Esto convertiría hello en Hello, wOrLd a WOrLd, BLABLA a BLABLA, etc. Si quieren mayúscula la primera letra y minúscula del otro, sólo tiene que utilizar la función LCASE:

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

Tenga en cuenta que SUPERIOR e UCASE hacen la misma cosa.

+1

gracias - eso hizo lo que necesitaba. Olvidé mencionar que primero tenía que establecer minúsculas. gracias – Chin

16

Se puede utilizar una combinación de UCASE(), MID() y 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

Esto no funcionaría, + no es el operador de concat con MySQL. –

+1

la respuesta publicada por Enrico Pallazzo debería funcionar bien –

+0

solo estaba tratando de resaltar la función UCASE en MySQL: P :) –

0

Esto debería funcionar bien:

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

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

Si hay más de 1 palabra en la columna, entonces esto no va a funcionar como se muestra a continuación. La UDF mencionada anteriormente puede ayudar en tal caso.

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) 

O quizá éste ayudará ...

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

esto está funcionando muy bien.

nombre de actualización de estado SET = CONCAT (UCASE (LEFT (nombre, 1)), LCASE (SUBSTRING (nombre, 2)));

30

Vincent excelente respuesta para mayúsculas primera carta funciona muy bien para la primera letra única capitalización de una cadena columna entera ..

pero lo que si quieres mayúscula la primera letra de cada palabra en las cuerdas de una columna de tabla?

por ejemplo: "High School Abbeville"

no había encontrado una respuesta a esto en Stackoverflow. Tuve que improvisar algunas respuestas que encontré en Google para proporcionar una solución sólida al ejemplo anterior. No es una función nativa, sino una función creada por el usuario que permite MySQL versión 5+.

Si tiene estado de usuario Super/Admin en MySQL o tiene una instalación mysql local en su propia computadora puede crear una FUNCIÓN (como un procedimiento almacenado) que se encuentra en su base de datos y puede usarse en todas las futuras consultas SQL en cualquier parte de la db.

La función creé me permite usar esta nueva función que se llama "UC_Words" al igual que el construido en funciones nativas de MySQL de modo que pueda actualizar una columna completa de esta manera:

UPDATE Table_name 
SET column_name = UC_Words(column_name) 

Para insertar el código de función, cambié el delimitador estándar MySQL (;) mientras creaba la función, y luego la reiniciaba a la normalidad después de la secuencia de comandos de creación de función. También personalmente quería que la salida también estuviera en UTF8 CHARSET.

creación de función =

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 ; 

Esto funciona un convite salida primeras letras mayúsculas en múltiples palabras dentro de una cadena.

Asumiendo que su nombre de usuario de MySQL tiene privilegios suficientes - si no es así, y no puedes configurar una base de datos temporal en su máquina personal para convertir las tablas, a continuación, pedir a su proveedor de alojamiento compartido si se van a ajustar esta función para usted.

+3

'CHARSET utf8_general_ci' debe cambiarse a' CHARSET utf8' (al menos en 5.7) –

1

crear una función:

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

utilizar la función

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