我在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

最佳答案

没有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

关于mysql - MYSQL-将每个句子中第一个单词的首字母大写,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34090195/

10-13 00:54
查看更多