【问题标题】:SQL InitCap that Uppercase some special wordsSQL InitCap 表示大写一些特殊的单词
【发布时间】:2015-12-17 10:09:36
【问题描述】:

我如何修改这个 InitCap 函数,以便它在字符串末尾时总是大写 AB 并且前面有一个空格。

  • 测试 Ab AB
  • testab
  • abtest

    分隔符 $$

    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$$
    

【问题讨论】:

  • 标记使用的 dbms。 (看起来不像 ANSI SQL...)
  • 根据那些可怕的反引号添加了mysql

标签: mysql sql database sql-function


【解决方案1】:

您想将字符串中的最后一个单词大写吗?你可以用简单的方法做到这一点。 cmets 中的描述。

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$$

【讨论】:

  • 是的,如果是 AB,我想把最后一个单词大写
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
相关资源
最近更新 更多