mysql - MYSQL:获取字段中每个单词的首字母
问题描述
我需要查询以从字段中获取每个单词的第一个字母。
Flora 将是 F 韦恩堡将是 FW
其他两个词的例子是 Gas City, South Bend,所以它是可变长度的词。
$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
";
解决方案
你可以使用这样的函数:
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 |
+--------------------------------------+
推荐阅读
- eclipse - 如何使用 Eclipse 和 Subversive SVN 管理非代码文件(文档等)?
- flutter - 从 Web API 获取数据的结果出现 FLUTTER 问题
- c# - 具有较少参数的 SqlTableAdapter.Insert()
- python - pandas 中的 df.iloc[:,1:2].values 和 df.iloc[:,1].values 有什么区别?
- java - 对象声明与实例化
- angular - Angular Universal npm run serve:universal 出现错误:ERROR ReferenceError: $ is not defined
- sql-server - 删除 SQL 数据库中的 crlf?
- java - 改造响应{protocol=h2, code=404, message=, url=https://myurl/api/}
- google-apps-script - 我想将图像设置为与电子邮件匹配
- r - 如何修复 split.default 中的 RichnessGrid 错误