Scrivi in ​​maiuscolo la prima lettera. MySQL


110

Qualcuno sa l'equivalente di questo TSQL nel linguaggio MySQL?

Sto cercando di scrivere in maiuscolo la prima lettera di ogni voce.

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

Risposte:


275

È quasi la stessa cosa, devi solo cambiare per usare la funzione CONCAT () invece dell'operatore +:

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

Questo si trasformerebbe helloin Hello, wOrLdin WOrLd, BLABLAin BLABLA, ecc. Se vuoi mettere in maiuscolo la prima lettera e in minuscolo l'altra, devi solo usare la funzione LCASE:

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

Nota che UPPER e UCASE fanno la stessa cosa.


1
grazie - ha fatto quello di cui avevo bisogno. Ho dimenticato di dire che dovevo prima impostare le lettere minuscole. grazie
Chin

55

Vincents risposta eccellente per maiuscole Prima Lettera grandi opere per la prima lettera unica capitalizzazione di un'intera stringa di colonna ..

MA cosa succede se si desidera mettere in maiuscolo la prima lettera di OGNI parola nelle stringhe di una colonna della tabella?

ad esempio: "Abbeville High School"

Non avevo trovato una risposta a questo in Stackoverflow. Ho dovuto mettere insieme alcune risposte che ho trovato su Google per fornire una soluzione solida all'esempio precedente. Non è una funzione nativa ma una funzione creata dall'utente consentita da MySQL versione 5+.

Se hai lo stato di utente Super / Admin su MySQL o hai un'installazione mysql locale sul tuo computer puoi creare una FUNZIONE (come una procedura memorizzata) che risiede nel tuo database e può essere utilizzata in tutte le future query SQL su qualsiasi parte del db.

La funzione che ho creato mi permette di utilizzare questa nuova funzione che ho chiamato "UC_Words" proprio come le funzioni native di MySQL in modo da poter aggiornare una colonna completa come questa:

UPDATE Table_name
SET column_name = UC_Words(column_name) 

Per inserire il codice della funzione, ho cambiato il delimitatore standard di MySQL (;) durante la creazione della funzione, quindi l'ho ripristinato alla normalità dopo lo script di creazione della funzione. Personalmente volevo anche che l'output fosse in UTF8 CHARSET.

Creazione della funzione =

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 ; 

Funziona a meraviglia quando si emettono le prime lettere maiuscole su più parole all'interno di una stringa.

Supponendo che il tuo nome utente di accesso MySQL abbia privilegi sufficienti, in caso contrario e non puoi impostare un DB temporaneo sulla tua macchina personale per convertire le tue tabelle, chiedi al tuo provider di hosting condiviso se imposterà questa funzione per te.


4
CHARSET utf8_general_cidovrebbe essere cambiato in CHARSET utf8(almeno il 5.7)
Manuel

@ManuelDallaLana in realtà potresti ricevere un errore, Illegal mix of collations for operation 'concat'quindi penso che correggi il set di caratteri o rimuovilo e impostalo come predefinito.
Al-Mothafar

@Alejandro Questa risposta rende maiuscola la prima lettera di ogni parola della stringa. La domanda e la risposta accettata mettono in maiuscolo solo la prima lettera della stringa. Sono entrambe risposte super utili ma per diversi casi d'uso.
Liam

C'è un errore, devi dichiarare 's' con charset "DECLARE s VARCHAR (255) CHARSET utf8;" o perderai alcuni personaggi. Grazie comunque per questa soluzione :-)
Jérôme Herry

E anche 'c': "DECLARE c CHAR (1) CHARSET utf8;"
Jérôme Herry

17

È possibile utilizzare una combinazione di UCASE(), MID()e CONCAT():

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

questo non abbassa tutte le altre lettere. ProvaSELECT CONCAT(UCASE(MID('TEST',1,1)),MID('TEST',2));
vladkras

8
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


5

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

Se ci sono più di 1 parola nella colonna, non funzionerà come mostrato di seguito. L'UDF di cui sopra può aiutare in questo 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 forse questo ti aiuterà ...

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


2

Funziona bene.

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

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

stavo solo cercando di evidenziare la funzione UCASE in MySQL: P :)
Jasdeep Singh

1

CREA UNA FUNZIONE:

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

USA LA FUNZIONE

UPDATE tbl_name SET col_name = UC_FIRST(col_name);

1

Se qualcuno cerca di scrivere in maiuscolo ogni parola separata dallo spazio ...

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;

Risultato

+--------------+
| name         |
+--------------+
| Abdul Karim  | 
+--------------+

0

Questo dovrebbe funzionare bene:

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

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

0
 select  CONCAT(UCASE(LEFT('CHRIS', 1)),SUBSTRING(lower('CHRIS'),2));

L'istruzione sopra può essere utilizzata per la prima lettera MAIUSC e il resto come minuscolo.


-1

Uso algo simples assim;)

DELIMITER $$
DROP FUNCTION IF EXISTS `uc_frist` $$
CREATE FUNCTION `uc_frist` (str VARCHAR(200)) RETURNS varchar(200)
BEGIN
    set str:= lcase(str);
    set str:= CONCAT(UCASE(LEFT(str, 1)),SUBSTRING(str, 2));
    set str:= REPLACE(str, ' a', ' A');
    set str:= REPLACE(str, ' b', ' B');
    set str:= REPLACE(str, ' c', ' C');
    set str:= REPLACE(str, ' d', ' D');
    set str:= REPLACE(str, ' e', ' E');
    set str:= REPLACE(str, ' f', ' F');
    set str:= REPLACE(str, ' g', ' G');
    set str:= REPLACE(str, ' h', ' H');
    set str:= REPLACE(str, ' i', ' I');
    set str:= REPLACE(str, ' j', ' J');
    set str:= REPLACE(str, ' k', ' K');
    set str:= REPLACE(str, ' l', ' L');
    set str:= REPLACE(str, ' m', ' M');
    set str:= REPLACE(str, ' n', ' N');
    set str:= REPLACE(str, ' o', ' O');
    set str:= REPLACE(str, ' p', ' P');
    set str:= REPLACE(str, ' q', ' Q');
    set str:= REPLACE(str, ' r', ' R');
    set str:= REPLACE(str, ' s', ' S');
    set str:= REPLACE(str, ' t', ' T');
    set str:= REPLACE(str, ' u', ' U');
    set str:= REPLACE(str, ' v', ' V');
    set str:= REPLACE(str, ' w', ' W');
    set str:= REPLACE(str, ' x', ' X');
    set str:= REPLACE(str, ' y', ' Y');
    set str:= REPLACE(str, ' z', ' Z');
    return  str;
END $$
DELIMITER ;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.