我需要查询以从字段中获取每个单词的首字母。
植物群将是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
";
答案 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 |
+--------------------------------------+