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