MYSQL-将每个句子中第一个单词的第一个字母大写
我在mysql表中有一列,用户已经添加了数据。有些用户喜欢使用适当的大小写,有些喜欢大写,有些喜欢全小写 我想做的是改变: 检查大楼 至: 检查大楼 和: 送文件。开门 至: 送文件。开门 我假设一个函数可以做到这一点,这样我就可以重用它 有什么想法吗 我试过这个方法,但它能做到每一个单词,而不是句子中的第一个单词MYSQL-将每个句子中第一个单词的第一个字母大写,mysql,sql,Mysql,Sql,我在mysql表中有一列,用户已经添加了数据。有些用户喜欢使用适当的大小写,有些喜欢大写,有些喜欢全小写 我想做的是改变: 检查大楼 至: 检查大楼 和: 送文件。开门 至: 送文件。开门 我假设一个函数可以做到这一点,这样我就可以重用它 有什么想法吗 我试过这个方法,但它能做到每一个单词,而不是句子中的第一个单词 BEGIN DECLARE c CHAR(1); DECLARE s VARCHAR(128); DECLARE i INT DEFAULT 1; D
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)默认'?.!-'代码>仍然没有像我预期的那样工作。由于您复制的代码是专门将每个单词的第一个字符更改为大写,您是否尝试过(除了限制点号字符串)使其达到您希望的效果?唯一的问题是它将每个单词大写,而不仅仅是每个句子的第一个单词。