web-dev-qa-db-fra.com

Capitaliser la première lettre. MySQL

Est-ce que quelqu'un connaît l'équivalent de ce TSQL dans le jargon de MySQL?

J'essaye de capitaliser la première lettre de chaque entrée.

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

C'est presque la même chose, il suffit de changer pour utiliser la fonction CONCAT () au lieu de l'opérateur +:

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

Ceci changerait hello en Hello, wOrLd en WOrLd, BLABLA en BLABLA, etc. Si vous voulez mettre la première lettre en majuscule et l'autre en minuscule, il vous suffit d'utiliser la fonction LCASE:

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

Notez que UPPER et UCASE font la même chose.

230
Vincent Savard

Excellente réponse de Vincents pour Majuscule Première La lettre fonctionne très bien pour la première lettre seulement la mise en majuscule d'une chaîne de colonne entière .. 

MAIS que faire si vous voulez mettre en majuscule la première lettre de CHAQUE Word dans les chaînes d'une colonne de tableau?

par exemple: "Lycée Abbeville"

Je n'avais pas trouvé de réponse à cela dans Stackoverflow. J'ai dû bricoler quelques réponses trouvées dans Google pour apporter une solution solide à l'exemple ci-dessus. Ce n'est pas une fonction native mais une fonction créée par l'utilisateur que permet la version 5+ de MySQL.

Si vous avez le statut d’utilisateur Super/Admin sur MySQL ou si vous avez une installation locale de MySQL sur votre propre ordinateur, vous pouvez créer une FUNCTION (semblable à une procédure stockée) qui se trouve dans votre base de données et peut être utilisée dans toute requête SQL future sur n’importe quelle partie du fichier. db.

La fonction que j'ai créée me permet d'utiliser cette nouvelle fonction que j'ai appelée "UC_Words", tout comme les fonctions natives de MySQL intégrées, afin de pouvoir mettre à jour une colonne complète comme celle-ci:

UPDATE Table_name
SET column_name = UC_Words(column_name) 

Pour insérer le code de fonction, j'ai modifié le délimiteur standard MySQL (;) lors de la création de la fonction, puis je l'ai réinitialisé à la normale après le script de création de fonction. Personnellement, je souhaitais aussi que la sortie soit en UTF8 CHARSET.

Création de fonction = 

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 ' ()[]{},.-_!@;:?/';  
  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 ; 

Cela fonctionne comme une gâterie générant des premières lettres majuscules sur plusieurs mots d'une chaîne.

En supposant que votre nom d'utilisateur MySQL dispose de privilèges suffisants - si ce n'est pas le cas, et que vous ne pouvez pas configurer une base de données temporaire sur votre machine personnelle pour convertir vos tables, demandez ensuite à votre fournisseur d'hébergement partagé s'il va configurer cette fonction pour vous.

38

Vous pouvez utiliser une combinaison de UCASE(), MID() et CONCAT():

SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;
17
Wouter Dorgelo
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/fr/string-functions.html#function_mid

7
Root

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

S'il y a plus d'un mot dans la colonne, cela ne fonctionnera pas comme indiqué ci-dessous . Le fichier UDF mentionné ci-dessus peut aider dans ce cas.

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)

Ou peut-être que celui-ci aidera ...

https://github.com/mysqludf/lib_mysqludf_str#str_ucwords

5
shantanuo

Cela fonctionne bien.

UPDATE state SET nom = CONCAT (UCASE (LEFT (nom, 1)), LCASE (SUBSTRING (nom, 2)));

2
Abhinav Sahu
UPDATE tb_Company SET CompanyIndustry = UCASE(LEFT(CompanyIndustry, 1)) + 
SUBSTRING(CompanyIndustry, 2, LEN(CompanyIndustry))
1
Jasdeep Singh

CRÉER UNE FONCTION:

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

UTILISER LA FONCTION

UPDATE tbl_name SET col_name = UC_FIRST(col_name);
1
Florin

Si quelqu'un essaie de mettre en majuscule chaque mot séparé par un espace ...

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;

Résultat

+--------------+
| name         |
+--------------+
| Abdul Karim  | 
+--------------+
1
Jahir islam
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)));
0
sandeep kumar
 select  CONCAT(UCASE(LEFT('CHRIS', 1)),SUBSTRING(lower('CHRIS'),2));

L'énoncé ci-dessus peut être utilisé pour la première lettre avec majuscule et reste en minuscule.

0
Aamir Khan

Cela devrait bien fonctionner:

UPDATE tb_Company SET CompanyIndustry = 
CONCAT(UPPER(LEFT(CompanyIndustry, 1)), SUBSTRING(CompanyIndustry, 2))
0
Chris Hutchinson