我想在MySQL列中返回每个单词的第一个字母,名为'姓名缩写'。
例如,我的表格可能如下所示:
| project_unit | initials |
+---------------------------------------+----------+
| Mbita Clinic Rehabilitation | MCR |
| Management Strategy for Thrips Cowpea | MSTC |
有什么建议吗?
答案 0 :(得分:1)
由于MySQL
不支持正则表达式替换,因此您需要首先包含UDF( U ser D 已定义 F )你可以从this链接获得。
获得regexp_replace函数后,只需使用
即可select regexp_replace('Mbita Clinic Rehabilitation', '[a-z ]', '')
将返回MRC
。
请注意,当前正则表达式将删除小写字母和空格,但如果您的字段可以包含数字或任何其他字符,则必须修改正则表达式。
希望这会有所帮助。
答案 1 :(得分: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,' ') as initials FROM main_table;
答案 2 :(得分:1)
MySql
不提供这样的try字符串操作函数,因此您需要使用查询创建函数和调用函数
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 query调用函数
mysql> SELECT GetUpperCase("Mbita Clinic Rehabilitation Management Strategy for Thrips Cowpea") AS `initials`;
+----------+
| initials |
+----------+
| MCRMSTC |
+----------+