在一个单元格中选择每个单词的第一个字母 - MySQL

4

我希望能够返回MySQL列“initials”中每个单词的首字母。

例如,我的表可能如下所示:

|             project_unit              | initials |
+---------------------------------------+----------+
|      Mbita Clinic Rehabilitation      |   MCR    |
| Management Strategy for Thrips Cowpea |   MSTC   |

任何建议?

我认为MySQL内置没有直接满足这个需求的字符串函数。即使您可以使用多个函数来实现,成本也比在任何编程语言中完成要高昂。 :) - Vishal Zanzrukia
3
似乎你想要查找所有大写字母。 - juergen d
3个回答

1

由于MySQL不支持正则表达式替换,因此您需要首先包含UDF(用户定义函数),您可以从this链接获取。

一旦获得regexp_replace函数,您就可以简单地使用它。

select regexp_replace('Mbita Clinic Rehabilitation', '[a-z ]', '')

这将返回MRC。请注意,当前的正则表达式将删除小写字母和空格,但如果您的字段可以包含数字或任何其他字符,则必须修改正则表达式。希望这能帮到你。


1
您可以使用以下函数来实现您的要求。
 DELIMITER $$
CREATE FUNCTION split_string(split_string varchar(255),my_delimiter varchar(1)) RETURNS varchar(10)
BEGIN
DECLARE temp_string varchar(255);
DECLARE occurance INT;
DECLARE i INT;
DECLARE temp_result varchar(10);
DECLARE final_result varchar(10);
SET temp_result = '';
SET occurance=length(split_string)-length(replace(split_string,' ',''))+1;
  IF occurance > 0 then
    set i=1;
    while i <= occurance do
        set temp_string = (select SUBSTRING_INDEX(SUBSTRING_INDEX(split_string, my_delimiter, i),my_delimiter ,-1));
        set temp_result = CONCAT(temp_result, SUBSTRING(temp_string,1,1));
      set i=i+1;
    end while;
  ELSE
        set temp_result = SUBSTRING(split_string,1,1);
  END IF;
  set occurance=0;
  SET final_result = temp_result;
  RETURN (final_result);
END $$
DELIMITER ;

您可以像这样使用它: SELECT Projcect_unit,split_string(Projcect_unit,' ')作为initials FROM main_table;

1

MySql 不提供此类尝试字符串操作函数,因此您需要创建函数并使用查询调用函数。

DELIMITER $$
CREATE FUNCTION `GetUpperCase`(InputString VARCHAR(1024)) RETURNS varchar(1024) CHARSET latin1
    DETERMINISTIC
BEGIN

    DECLARE return_string,inputDATA VARCHAR(1024);
    DECLARE schar VARCHAR(1);
    DECLARE string_length, char_code INT;

    SET string_length = LENGTH(InputString);
    SET inputDATA = InputString ;
    SET return_string = '';
    WHILE string_length > 0 DO
        SET schar = SUBSTRING(inputDATA FROM (-1 * string_length) FOR 1);
        SET char_code = ORD(schar);
        IF char_code >= 65 AND char_code <= 90  THEN
            SET return_string = CONCAT(return_string, schar);
        END IF;
        SET string_length = string_length - 1;
    END WHILE;

    RETURN return_string;
END $$
DELIMITER ;

使用 SQL select 查询调用函数。
mysql> SELECT GetUpperCase("Mbita Clinic Rehabilitation Management Strategy for Thrips Cowpea") AS `initials`;
+----------+
| initials |
+----------+
| MCRMSTC  |
+----------+

当我在MySQL中执行该函数时,它显示错误。 - alphy
1
哦,是打错了字..我在函数结尾处漏掉了$$,我已经更新了答案,请现在再试一下。 - Girish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接