2010-05-19 36 views
6

thể trùng lặp:
MySQL - Capitalize first letter of each word, in existing tableMySQL chuỗi chức năng tương đương với ucwords PHP() chức năng

Có một hàm MySQL Chuỗi tương đương với PHP ucwords() chức năng.

Mục tiêu cuối cùng là sử dụng MySQL để viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi.

Ví dụ.

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

này sẽ cung cấp cho tôi những kết quả 'john doe'

Tôi muốn kết quả là 'John Doe'

Trả lời

9

bài viết này cho bạn thấy làm thế nào để xác định một trường hợp đúng cách trong MySQL: Proper Case.

Trong trường hợp liên kết thối:

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

tài nguyên tốt đẹp, câu trả lời lười biếng, hàm được gọi là 'đúng Case' để giúp mọi người tìm thấy nó trong tương lai http://www.artfulsoftware.com/infotree /queries.php#122 – Moak

+0

Điều này sẽ vít lên danh từ sở hữu, chẳng hạn như "John's", dẫn đến "John'S". Điều này có thể được sửa bằng cách thêm biến 'c_peek' cho ký tự tiếp theo và kiểm tra nó ngay sau' IF c> = 'a' AND c <= 'z' THEN' cho một dấu cách. ví dụ. 'NẾU KHÔNG (c = 's' && c_peek = '') THEN' – Craige

Các vấn đề liên quan