MYSQL:获取字段中每个单词的第一个字母

时间:2020-04-30 02:11:53

标签: mysql

我需要查询以从字段中获取每个单词的首字母。
植物群将是F 韦恩堡将是固件

另外两个单词示例是South Bend的Gas City,所以它是可变长度的单词。

$query="SELECT id,
    (CASE
            WHEN toggle = 1 THEN concat(city,' ',school)
            WHEN toggle = 2 THEN concat(school,' (',substring(city,1,1),')')
            ELSE school
    END) as schools
    FROM a_schools
    ORDER BY schools
    ";

1 个答案:

答案 0 :(得分:0)

您可以使用如下功能:

DROP FUNCTION IF EXISTS f_letterOfEachWord;
DELIMITER $$
CREATE FUNCTION f_letterOfEachWord(p_text varchar(255)) 
RETURNS varchar(255)
DETERMINISTIC
BEGIN
    DECLARE result varchar(255);
    DECLARE tmp varchar(255);
    SET tmp = p_text;
    SET result = SUBSTRING(tmp, 1, 1);
    WHILE (LOCATE(' ', tmp) > 0) DO
        SET result = CONCAT(result, SUBSTRING(tmp, LOCATE(' ', tmp) + 1, 1));
        SET tmp = SUBSTRING(tmp, LOCATE(' ', tmp) + 1);
    END WHILE;
    RETURN UPPER(result);
END$$
DELIMITER ;

并像这样使用它:

mysql> select f_letterOfEachWord('asdf');
+----------------------------+
| f_letterOfEachWord('asdf') |
+----------------------------+
| A                          |
+----------------------------+

mysql> select f_letterOfEachWord('asdf qwer');
+---------------------------------+
| f_letterOfEachWord('asdf qwer') |
+---------------------------------+
| AQ                              |
+---------------------------------+

mysql> select f_letterOfEachWord('asdf qwer yxcv');
+--------------------------------------+
| f_letterOfEachWord('asdf qwer yxcv') |
+--------------------------------------+
| AQY                                  |
+--------------------------------------+
相关问题