2015-12-04 139 views
0

我在用戶添加數據的mysql表中有一列。一些用戶喜歡使用適當的大寫字母,有些像大寫字母,有些全是小寫字母。MYSQL - 大寫每個句子中第一個單詞的第一個字母

我想要做的是改變: CHECK BUILDING。

收件人: 檢查大樓。

And: DELIVER PAPERS。解鎖門。

收件人: 送紙。解鎖門。

我假設一個函數可以做到這一點,所以我可以重新使用它。

任何想法?

我試過這個,但它並不是每個單詞都不是句子中的第一個單詞。

BEGIN 
    DECLARE c CHAR(1); 
    DECLARE s VARCHAR(128); 
    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 
+0

那麼你可以嘗試自己做一些嘗試 - 如果它不起作用 - 顯示你已經嘗試過,也許你會得到一些關於如何使它工作的建議。 – PaulF

+0

用我試過的編輯。不要熱衷於mysql的功能。這個問題必須是有人遇到過的問題,那麼爲什麼要重新發明輪子,如果某個人有共享的功能,將不勝感激! – ManovrareSoft

+1

使用觸發器確保數據以您決定的方式存儲! – jarlh

回答

0

有沒有MySQL的功能來做到這一點。此函數將字符串中每個單詞的首字母大寫。

CREATE FUNCTION CAP_FIRST (input VARCHAR(255)) 

RETURNS VARCHAR(255) 

DETERMINISTIC 

BEGIN 
    DECLARE len INT; 
    DECLARE i INT; 

    SET len = CHAR_LENGTH(input); 
    SET input = LOWER(input); 
    SET i = 0; 

    WHILE (i < len) DO 
     IF (MID(input,i,1) = ' ' OR i = 0) THEN 
      IF (i < len) THEN 
       SET input = CONCAT(
        LEFT(input,i), 
        UPPER(MID(input,i + 1,1)), 
        RIGHT(input,len - i - 1) 
       ); 
      END IF; 
     END IF; 
     SET i = i + 1; 
    END WHILE; 

    RETURN input; 
END; 

參考文獻link

+0

唯一的問題是每個單詞的大寫,而不僅僅是每個句子的第一個單詞。 – PaulF

相關問題