2010-05-19 18 views
6

Eventuali duplicati:
MySQL - Capitalize first letter of each word, in existing tableFunzione MySQL String equivalente a ucwords PHP() funzione

C'è una funzione MySQL String equivalente alla funzione PHP ucwords().

L'obiettivo finale è di utilizzare MySQL in maiuscolo la prima lettera di ogni parola in una stringa.

Esempio.

-- The name field in the table holds "JOHN DOE" 
SELECT LOWER(name) 
    FROM table 

Questo mi darà il risultato 'john doe'

Voglio che il risultato sia 'John Doe'

risposta

9

questo articolo viene illustrato come definire una corretta Caso in MySQL: Proper Case.

Incluso nel caso di collegamento rot:

DROP FUNCTION IF EXISTS proper; 
SET GLOBAL log_bin_trust_function_creators=TRUE; 
DELIMITER | 
CREATE FUNCTION proper(str VARCHAR(128)) 
RETURNS VARCHAR(128) 
BEGIN 
    DECLARE c CHAR(1); 
    DECLARE s VARCHAR(128); 
    DECLARE i INT DEFAULT 1; 
    DECLARE bool INT DEFAULT 1; 
    DECLARE punct CHAR(18) DEFAULT '()[]{},.-_\'[email protected];:?/'; -- David Rabby & Lenny Erickson added \' 
    SET s = LCASE(str); 
    WHILE i <= LENGTH(str) DO -- Jesse Palmer corrected from < to <= for last char 
    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 ; 
select proper("d'arcy"); 
+------------------+ 
| proper("d'arcy") | 
+------------------+ 
| D'Arcy   | 
+------------------+ 
+3

bella risorsa, risposta pigri, la funzione si chiama 'La corretta Case' per aiutare le persone future trovano http://www.artfulsoftware.com/infotree /queries.php#122 – Moak

+0

Questo rovinerà i nomi possessivi, come "John's", risultando in "John'S". Questo può essere risolto aggiungendo una variabile 'c_peek' per il prossimo carattere, e controllandolo subito dopo' IF c> = 'a' AND c <= 'z' THEN' per uno spazio. per esempio. 'SE NON (c = 's' && c_peek = '') THEN' – Craige