125 votes

Mettez la première lettre en majuscule. MySQL

Quelqu'un connaît-il l'équivalent de ce TSQL en langage MySQL ?

J'essaie de mettre en majuscule la première lettre de chaque entrée.

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

301voto

Vincent Savard Points 12215

C'est presque la même chose, vous devez juste 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));

Cela rendrait hello a Hello , wOrLd a WOrLd , BLABLA a 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.

1 votes

Merci - cela a fait ce dont j'avais besoin. J'ai oublié de préciser que je devais d'abord passer en minuscules. Merci.

62voto

L'excellente réponse de Vincent pour les majuscules Premier Letter fonctionne très bien pour la première lettre uniquement capitalisation d'une chaîne de colonnes entière..

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

ex : "Lycée d'Abbeville"

Je n'avais pas trouvé de réponse à cette question dans Stackoverflow. J'ai dû bricoler quelques réponses que j'ai trouvées sur Google pour fournir une solution solide à l'exemple ci-dessus. Il ne s'agit pas d'une fonction native mais d'une fonction créée par l'utilisateur que MySQL version 5+ autorise.

Si vous avez le statut d'utilisateur Super/Admin sur MySQL ou si vous avez une installation mysql locale sur votre propre ordinateur, vous pouvez créer une FONCTION (comme une procédure stockée) qui se trouve dans votre base de données et peut être utilisée dans toutes les futures requêtes SQL sur n'importe quelle partie de la base de données.

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 intégrées de MySQL afin de pouvoir mettre à jour une colonne complète comme ceci :

UPDATE Table_name
SET column_name = UC_Words(column_name) 

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

Création de fonctions =

DELIMITER ||  

CREATE FUNCTION `UC_Words`( str VARCHAR(255) ) RETURNS VARCHAR(255) CHARSET utf8 DETERMINISTIC  
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 très bien pour sortir les premières lettres en majuscules de plusieurs mots dans une chaîne.

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

4 votes

CHARSET utf8_general_ci doit être changé en CHARSET utf8 (au moins sur 5.7)

0 votes

@ManuelDallaLana en fait vous pourriez obtenir une erreur Illegal mix of collations for operation 'concat' Je pense donc qu'il suffit de corriger le jeu de caractères ou de le supprimer et de le mettre par défaut.

0 votes

@Alejandro Cette réponse met en majuscule la première lettre de chaque mot de la chaîne. La question et la réponse acceptée ne mettent la majuscule qu'à la première lettre de la chaîne. Ce sont toutes deux des réponses super utiles mais pour des cas d'utilisation différents.

19voto

Enrico Pallazzo Points 6860

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

SELECT CONCAT(UCASE(MID(name,1,1)),MID(name,2)) AS name FROM names;

0 votes

Cela n'abaisse pas toutes les autres lettres. Essayez SELECT CONCAT(UCASE(MID('TEST',1,1)),MID('TEST',2));

9voto

user2813003 Points 41
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

0 votes

Cela ne fonctionne que pour le premier mot.

5voto

shantanuo Points 4739

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. L'UDF mentionné ci-dessus peut vous 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 vous aidera...

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X