mysql 获取每个单词的第一个字母

标签 mysql

我有一列文本用连字符分隔,例如 hello-welcome-to-tutorials,我想拆分文本并选取每个单词的第一个字母。

所以单词是[你好,欢迎,到,教程]

第一个字母是hwtt。我想为此在 MySQL 中提出一个选择查询。

这是我的查询:

select GROUP_CONCAT(LEFT(SUBSTRING_INDEX(mycolumn, '-', -1), 1) SEPARATOR '') from mytable

通过我只得到最后一个单词的第一个字母,即t

如何解决这个问题?

MySQL版本是8.0.33

最佳答案

您可以使用REGEXP_REPLACE来做到这一点:

SELECT
  REGEXP_REPLACE(CONCAT('-', mycolumn), '-([^-])[^-]*', '$1')
FROM mytable

这使用正则表达式匹配:

  • - 匹配连字符(引入单词)
  • ([^-]) 匹配任何非连字符,并捕获(第一个字母)
  • [^-]+ 匹配零个或多个非连字符(单词的其余部分)

替换使用$1来引用捕获的字符

示例:

+---------------------------------------------------------------------------------+
| REGEXP_REPLACE(CONCAT('-', 'hello-welcome-to-tutorials'), '-([^-])[^-]*', '$1') |
+---------------------------------------------------------------------------------+
| hwtt                                                                            |
+---------------------------------------------------------------------------------+

关于mysql 获取每个单词的第一个字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77137490/

相关文章:

php - 无法通过 php 脚本进行查询

mysql - 以最少的停机时间更改 MySQL InnoDB 表

asp.net - 使用 Sql Server 数据库文件 (mdf) 构建应用程序会不会是个糟糕的主意?

php - 我应该对这个 MYSQL 查询使用 JOIN 还是 UNION ?

c# - 在 .NET 中将整个数据库从一台服务器复制到另一台服务器

mysql - 使用 Q 在带有express和mysql的node中返回二次查询

sql - MySQL多表查询问题

c++ - 视觉 C++ 2010 mysql 连接

python - 存储过程获取最后插入的行python mysql连接器

mysql - 错误代码 : 1452. 无法添加或更新子行