mysql - SQL InitCap表示一些特殊单词大写

标签 mysql sql database sql-function

如何修改此 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/

相关文章:

javascript - 所有 INCLUDE 的组合 WHERE 子句

mysql - SQL - 将所有表的名称更改为以大写字母开头的所有驼峰式大小写

sql - 哪个 RDBMS 或其他工具提供了良好的 SQL 语法错误消息?

mysql - 带有 COUNT 的子查询 (mysql)

mysql - 如何在不干扰数据库中现有数据的情况下将外键字段转换为多对多字段?

php - 在 php while 循环中打印与一次相同的行

sql - 隐藏空列

sql - Oracle - all_tables 不完整?

php - 列出给定日期 SQL 的所有可用汽车

c# - EF Code-First 一对一关系 : Multiplicity is not valid in Role * in relationship