如何修改此 InitCap 函数,使其在字符串末尾且前面有空格时始终为大写 AB。
- 测试 Ab <-- 应显示 AB
- testab <-- 应显示 ab
abtest <-- 应该显示 ab
分隔符$$
DROP FUNCTION IF EXISTS `CapitializeFirstCharInEveryWord`$$ CREATE FUNCTION `CapitializeFirstCharInEveryWord`(x char(100)) RETURNS char(100) CHARSET utf8 BEGIN SET @str=''; SET @l_str=''; WHILE x REGEXP ' ' DO SELECT SUBSTRING_INDEX(x, ' ', 1) INTO @l_str; SELECT SUBSTRING(x, LOCATE(' ', x)+1) INTO x; SELECT CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(@l_str,1,1)),LOWER(SUBSTRING(@l_str,2)))) INTO @str; END WHILE; RETURN LTRIM(CONCAT(@str, ' ', CONCAT(UPPER(SUBSTRING(x,1,1)),LOWER(SUBSTRING(x,2))))); END$$
最佳答案
您想将字符串中的最后一个单词大写吗?你可以用简单的方式做到这一点。评论中的说明。
CREATE FUNCTION `CapitalizeLastWord`(x char(100)) RETURNS char(100) CHARSET utf8
BEGIN
-- detect has x space
SET @space_pos_reverse = LOCATE(' ', REVERSE(x));
-- if not return unchanged x
IF @space_pos_reverse = 0 THEN RETURN x;
END IF;
-- getting last space position
SET @last_space_pos = LENGTH(x)-@space_pos_reverse+1;
-- split x to 2 parts, 2nd part gettin UPPER
RETURN CONCAT(SUBSTRING(x, 1, @last_space_pos), UPPER(SUBSTRING(x, @last_space_pos+1)) );
END$$
关于mysql - SQL InitCap表示一些特殊单词大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34331836/