MYSQL - 将每个句子中第一个单词的首字母大写

时间:2015-12-04 14:07:26

标签: mysql sql

我在mysql表中有一个用户添加了数据的列。有些用户喜欢使用正确的大小写,有些喜欢大写单词,有些喜欢小写。

我想做的是改变: 检查建筑物。

检查建筑物。

交付论文。解锁门。

发表论文。解锁门。

我假设一个函数可以这样做,所以我可以重复使用它。

有什么想法吗?

我尝试了这个,但是每个单词都不是句子中的第一个单词。

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

1 个答案:

答案 0 :(得分: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