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

MYSQL-将每个句子中第一个单词的第一个字母大写,mysql,sql,Mysql,Sql,我在mysql表中有一列,用户已经添加了数据。有些用户喜欢使用适当的大小写,有些喜欢大写,有些喜欢全小写 我想做的是改变: 检查大楼 至: 检查大楼 和: 送文件。开门 至: 送文件。开门 我假设一个函数可以做到这一点,这样我就可以重用它 有什么想法吗 我试过这个方法,但它能做到每一个单词,而不是句子中的第一个单词 BEGIN DECLARE c CHAR(1); DECLARE s VARCHAR(128); DECLARE i INT DEFAULT 1; D

我在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
开始
声明c字符(1);
声明s VARCHAR(128);
声明i INT默认值为1;
声明bool INT默认值为1;
声明点字符(17)默认为“?!-”;
设置s=LCASE(str);
而我<长度(str)做
开始
集合c=子串(s,i,1);
如果定位(c,点)>0,则
设置bool=1;
ELSEIF bool=1那么
开始

如果c>='a'和c='0'和c,则没有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;
首先创建函数CAP_(输入VARCHAR(255))
返回VARCHAR(255)
确定性
开始
声明lenint;
声明i INT;
设置len=字符长度(输入);
设置输入=较低(输入);
设置i=0;
而(我)是这样做的
如果(MID(输入,i,1)=''或i=0),则
如果(我

参考资料。

好吧,你可以试着自己做一些尝试——如果不起作用的话——展示你所做的尝试&也许你会得到一些关于如何让它起作用的建议。用我尝试过的内容编辑。不喜欢mysql函数。我想这一定是以前有人遇到过的问题,如果有人有分享的功能,那为什么要重新发明轮子呢!使用触发器确保数据按照您决定的方式存储!仍然需要一个函数来格式化数据。这是我真正挣扎的部分<代码>声明点字符(17)默认“()[]{},.-!@;:?/”我改为
声明点状字符(17)默认'?.!-'仍然没有像我预期的那样工作。由于您复制的代码是专门将每个单词的第一个字符更改为大写,您是否尝试过(除了限制点号字符串)使其达到您希望的效果?唯一的问题是它将每个单词大写,而不仅仅是每个句子的第一个单词。