2015-12-04 135 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

相关问题